2016-02-26 120 views
0

我目前正在使用jQuery文件上傳器上傳.dcm文件的dicom文件上傳系統。它工作正常,但由於DICOM數據集可能變得非常大,我想在上傳之前用JSZip壓縮文件。使用JSZip壓縮dcm文件

只是我將文件對象傳遞給一個zip函數,該函數返回壓縮文件對象。這與通常已知的文件工作正常,但不與DICOM文件。我已經嘗試在壓縮之前將文件編碼爲base64字符串,但這也不起作用。 JSZip總是拋出我下面的錯誤:

Uncaught Error: The data of 'IM-0001-0001.dcm' is in an unsupported format ! 

我使用下列文件壓縮功能:

compressFile: function(data) { 

    var zip = new JSZip(); 

    var file = data.files[0]; 

    zip.file(file.name, file, {binary:false}); 

    content = zip.generate({ 
     compression: 'DEFLATE' 
    }); 

    return content; 
} 

我也試圖與Base64和二進制的.file選項,但沒有取得了訣竅。

有沒有人有關如何獲得這項工作的線索?我是一個初學者到JS所以對不起了noobish問題^^

親切的問候

+1

這與DICOM無關。 JSZip不知道該文件是DICOM與任何其他類型的二進制數據。 'zip.file()'的第二個參數應該是數據 - 比如數組或者ArrayBuffer。這很可能是你的問題。 – whiskeyspider

+0

@whiskeyspider是對的,問題是'data.files [0]'的類型。你知道它的類型嗎? –

+0

data.files [0]是一個File對象。我已經修改了我的代碼,將其轉換爲base64,但是這會導致一個空的zip。我會在星期一嘗試你的建議。謝謝 – user285814

回答

0

你需要使用一個FileReader閱讀的data.files[0]第一內容:

var reader = new FileReader(); 
reader.onload = (function(e) { 
    var zip = new JSZip(e.target.result); 

    var result = zip.generate({ 
    compression: 'DEFLATE' 
    }); 

    // do something with result 
} 
reader.readAsArrayBuffer(data.files[0]); 

參見this example

警告,FileReader是異步的:你不能讓你的函數返回結果。