2016-02-26 6 views
0

im в настоящее время работает над системой загрузки файлов dicom, которая загружает файлы .dcm с загрузчиком файлов jquery. Он работает нормально, но поскольку наборы данных DICOM могут быть очень большими, я хочу сжать файлы с помощью JSZip перед загрузкой.Сжатие dcm-файлов с помощью JSZip

Просто я передаю объект файла функции zip, которая возвращает zipped-файл. Это отлично работает с общеизвестными файлами, но не с файлами DICOM. Я уже пытался кодировать файлы в base64 строку перед zipping, но это тоже не работает. 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 вариантов, но это не сделал трюк.

Кто-нибудь подскажет, как это сделать? Im новичок в JS, так им жаль noobish вопросы ^^

С наилучшими пожеланиями

+1

Это не имеет никакого отношения к DICOM. JSZip не знает, что файл DICOM отличается от любых других двоичных данных. Второй аргумент 'zip.file()' должен быть данными - например, Array или ArrayBuffer. Это, скорее всего, ваша проблема. – whiskeyspider

+0

@whiskeyspider прав, проблема - это тип 'data.files [0]'. Вы знаете его тип? –

+0

data.files [0] - объект File. Я уже изменил свой код, чтобы перевести его на base64, но это приводит к пустой почтой. я попробую ваши предложения в понедельник. благодаря – 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 является асинхронным: вы не можете заставить свою функцию возвращать результат.

Смежные вопросы