【问题标题】:Compress dcm files with JSZip使用 JSZip 压缩 dcm 文件
【发布时间】:2016-02-26 10:51:36
【问题描述】:

我目前正在开发一个使用 jquery 文件上传器上传 .dcm 文件的 dicom 文件上传系统。它工作正常,但由于 DICOM 数据集可能会变得非常大,我想在上传之前使用 JSZip 压缩文件。

我只是将文件对象传递给返回压缩文件对象的 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;
}

我也尝试在 .file 选项中使用 base64 和二进制,但这并没有成功。

有没有人知道如何让它工作?我是 JS 的初学者,所以我很抱歉提出了一些无聊的问题^^

亲切的问候

【问题讨论】:

  • 这与DICOM无关。 JSZip 不知道该文件是 DICOM 与任何其他类型的二进制数据。 zip.file() 的第二个参数应该是数据——例如 Array 或 ArrayBuffer。这很可能是您的问题。
  • @whiskeyspider 是对的,问题是data.files[0] 的类型。你知道它的种类吗?
  • data.files[0] 是一个文件对象。我已经修改了我的代码以将其转换为 base64,但这会导致一个空的 zip。我会在星期一试试你的建议。谢谢

标签: javascript upload zip dicom jszip


【解决方案1】:

你需要先使用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 是异步的:你不能让你的函数返回结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2017-03-28
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2021-11-08
    • 2017-03-28
    相关资源
    最近更新 更多