【问题标题】:Extract image file from zipfile in node.js and upload file to server从 node.js 中的 zipfile 中提取图像文件并将文件上传到服务器
【发布时间】:2017-11-19 04:33:20
【问题描述】:

我希望我的用户在浏览器中选择一个包含图像文件的 zip 文件。然后,我检查 zip 文件并选择要发送到远程服务器的图像文件(在那里处理它们等)。这适用于加载 zip 文件并识别其中的文件。我通过

选择文件
    <input type="file"> 

元素;我使用优秀的 JSZip 库将其作为 zip 文件读入:

    var zip = new JSZip();
    zip.loadAsync("file selected in browser")

然后我识别此文件中的 zip 文件:

    for (var key in zip.files) {
      var myFile=zip.files[key]; }

现在,使用 JSZip,我可以提取每个压缩文件:

    zip.files["key for this file"].async("base64").then(function (myImage) {
      //send this image to a remote server as if it were a file
    });

问题出在最后一步。我无法找出正确的调用、参数等组合来正确上传。似乎很明显的事情是创建一个 formData 对象并从那里发送它,所以:

    var fd = new FormData();                  
    fd.append("file", myImage);

然后把它贴上ajax:

    $.ajax({
        type: 'POST',
        url: url,
        enctype: 'multipart/form-data',
        contentType: false,
        dataType: false,
        processData: false,
        data: fd,
    }).done(function(data){
       //do something with returned data
    })

但是,这在服务器端不起作用(尽管从表单发送到相同地址的相同文件可以正常工作)。我错过了什么?或者我不能用 $.ajax(或 npm http 模块)来做这件事,而必须使用更底层的东西,比如 npm 请求模块?

救命!

【问题讨论】:

    标签: node.js upload extract zipfile


    【解决方案1】:

    好的,想通了。主要是通过试验和(主要是)错误,但这是有效的。首先,您必须从 zip 文件中将文件提取为“blob”,因此:

    zip.files["key for this file"].async("blob").then(function (myImage) {
      //send this image to a remote server as if it were a file
    });
    

    然后,当您拥有 blob 时,您必须将其嵌入到另一个 blob 中,如下所示:

    var blob = new Blob([myImage], { type: "image/jpeg"});
    

    然后创建一个新的 FormData 对象,并将我们的新文件 blob 添加到其中:

    var fd = new FormData();
    fd.append('file', blob, 'myFile.jpg');  
    

    然后你调用 $.ajax(如果你使用 jquery),所以:

    $.ajax({
      type: 'POST',
      url: url,
      enctype: 'multipart/form-data',
      contentType: false,
      dataType: false,
      processData: false,
      data: fd,
    })
     .done (function(data){
       //do something with the success
    })
    

    而且效果很好。坦率地说,将 blob 插入 blob 中似乎很奇怪,但它确实有效,所以就在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2016-08-07
      • 2010-12-28
      • 1970-01-01
      • 2016-06-06
      • 2013-05-22
      • 1970-01-01
      相关资源
      最近更新 更多