Javascript将提取的文件从zip转换为浏览器中的新File()方法

时间:2017-08-09 04:39:14

标签: javascript meteor fs

我在将解压缩文件的数据从zip转换为新的File()方法时出现问题,因此我可以将其重新上传到其他服务器。主要的想法是用户可以上传zip文件但是系统只会上传zip文件而不是zip本身......所以我需要首先提取zip中的文件并将其上传到服务器。我知道可以通过首先上传zip并将其解压缩到服务器来完成,但是zip文件中的文件需要首先使用适当的名称重命名,然后再上传并保存在数据库中。

我已经可以提取文件,但我的问题是如何将下面的编码数据转换为新的File()方法。

enter image description here

我试过了:

new File([data], 'cc_causation_report.docx', {type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', lastModified: Date.now()});

但它不起作用。

以下是完整的代码。

var filesInput = file;
var res;

var reader = new FileReader();
reader.readAsBinaryString(filesInput);

reader.onloadend = function(e){
    var myZip = e.target.result; 
    var unzipper = new JSUnzip(myZip);

    unzipper.readEntries();    
    var myFiles = unzipper.entries;    

    let z_num_files_uploaded = 0;
    let z_temp_files = [];
    let z_num_uploader_files = myFiles.length;

    for(var i=0; i<myFiles.length; i++) {
        var data = myFiles[i].data;

        var name = myFiles[i].fileName; // This is the file name
        var _fxt = name.split('.').pop().toLowerCase();

        var bytes = new Uint8Array(data.length);
        for(var _i = 0 ; _i < data.length; _i++){
          bytes[_i] = data.charCodeAt(_i);
        }

        zfile = new File([bytes], name, {type: _MIME_TYPES[_fxt], lastModified: Date.now()});

        console.log(zfile);


        var uploader = new Slingshot.Upload("myFileUploads");

        uploader.send(zfile, function (error, downloadUrl) {
          if (error) {
            alert (error);
          }
          else {


          }
        });
    }
}

感谢任何帮助。 : - )

谢谢!

0 个答案:

没有答案