我的前端代码(react)从我的后端(节点)获取响应并按预期下载zip文件但是zip文件在单击时将生成CPGZ文件而不是解压缩zip。
反应代码
downloadResults: function(app, s3){
app.use('/api', apiRoutes)
apiRoutes.get('/download-results-file', function(req, res, next){
res.set({'Content-type': 'text/plain'})
var params = {
Bucket: 'xxxxx',
Delimiter: '/',
Prefix: 'xxxxxx'
};
var filesArray = []
var files = s3.listObjectsV2(params).createReadStream()
var xml = new XmlStream(files)
xml.collect('Key')
xml.on('endElement: Key', function(item) {
filesArray.push(item['$text'].substr(params.Prefix.length))
})
var data = zip(filesArray, req.query.jobName, params)
xml.on('end', function() {
res.send(data.toString())
})
})
}
节点代码
console.log(res)
当我在前端1_1
时,我得到了一条可写的流"对象。我将其转换为blob然后我使用FileSaver来创建zip文件。任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您的后端发送zip文件,而不是文本文件。请勿使用'Content-type': 'text/plain'
,而是使用'Content-type': 'application/zip'
或'Content-type': 'application/octet-stream'
。
zip(...)
返回什么?我期待一个nodejs缓冲区。如果是这样,res.send(data.toString())
将从UTF-8(the default encoding)解码您的内容。由于它不是文本而是二进制内容,因此您将在此处损坏您的内容。相反,请使用res.send(data)
。