Javascript 使用Poco::Compress和FileSaver.js下载Zip文件
我正在尝试使用angularJS中的$http服务下载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
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函数中,我发现我的流数据以某种方式被破坏了。