Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Poco::Compress和FileSaver.js下载Zip文件_Javascript_Angularjs - Fatal编程技术网

Javascript 使用Poco::Compress和FileSaver.js下载Zip文件

Javascript 使用Poco::Compress和FileSaver.js下载Zip文件,javascript,angularjs,Javascript,Angularjs,我正在尝试使用angularJS中的$http服务下载zip文件,我已设置: responseType = arraybuffer contentType = application/zip 因此,我的文件不知怎么被损坏了。我已经搜索了一些建议responseType='blob'的线程,但没有任何帮助。不过我可以看到正文的二进制内容 我的服务器代码: response.setStatusAndReason(HTTPResponse::HTTP_OK); response.setKeepAl

我正在尝试使用angularJS中的$http服务下载zip文件,我已设置:

responseType = arraybuffer 
contentType = application/zip
因此,我的文件不知怎么被损坏了。我已经搜索了一些建议responseType='blob'的线程,但没有任何帮助。不过我可以看到正文的二进制内容

我的服务器代码:

response.setStatusAndReason(HTTPResponse::HTTP_OK);
response.setKeepAlive(true);
response.setContentType("application/zip");
response.set("Content-Disposition","attachment; filename=\"logs.zip\"");
Poco::Zip::Compress compress(response.send(),false);
compress.addRecursive(Constants::LOG_FOLDER,
                      Poco::Zip::ZipCommon::CM_DEFLATE,
                      Poco::Zip::ZipCommon::CL_SUPERFAST,
                      false, "server_logs");
compress.close();
我使用的是第三方api。我可以正确下载其他文件。我只是对zip文件有这个问题

客户端代码:

var headers = response.headers();
     var filename = "";
     var disposition = headers['content-disposition'];
     if (disposition && disposition.indexOf('attachment') !== -1) {
         var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
         var matches = filenameRegex.exec(disposition);
         if (matches != null && matches[1]) filename = 
         matches[1].replace(/['"]/g, '');
      }
    var file = new File([response.data], filename, {type: headers['content-
    type']});
    saveAs(file);

显示使用FileSaver的JavaScript。FileSaver用于下载在客户端生成或编辑的数据。在这里,看起来您完全是在服务器端准备下载,不需要文件保存。是的,我是在服务器端准备文件。将内容作为响应数据流发送。如果您在浏览器中直接导航到下载URL,它是否正确地将zip文件作为附件下载?如果是这种情况,您可以直接提供一个到下载URL的链接-不需要Angular或FileSaver。感谢@AlexK,如果我将response.send()直接传递到Poco提供的compress函数中,我发现我的流数据以某种方式被破坏了。