首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileSaver下载损坏的ZIP文件

FileSaver下载损坏的ZIP文件
EN

Stack Overflow用户
提问于 2017-03-06 19:11:23
回答 1查看 6.2K关注 0票数 1

我的前端代码(react)从后端(节点)获得一个响应,并按预期下载一个zip文件,但是当单击zip文件时,将生成一个CPGZ文件,而不是解压缩zip。

反应码

代码语言:javascript
复制
downloadResultsFile() {

 fetch(`https://XXXXXXXX/api/download-results-file?jobName=${this.props.selectedRun.jobs[0].env.MIC_JOB_ID}`, {
  origin: 'same-origin', 
})
.then((res) => res.blob())
.then((file) =>  FileSaver.saveAs(file, this.props.selectedRun.jobs[0].env.MIC_JOB_ID + '-results.zip'));   


}

节点码

代码语言:javascript
复制
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)时,我得到一个对象的“可写流”。我将其转换为blob,然后使用FileSaver创建zip文件。任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-03-09 18:04:09

后端发送的是zip文件,而不是文本文件。不要使用'Content-type': 'text/plain',而是使用'Content-type': 'application/zip''Content-type': 'application/octet-stream'

zip(...)返回什么?我希望有一个nodejs缓冲区。如果是这样的话,res.send(data.toString())将从UTF-8 (默认编码)中解码您的内容。因为它不是文本而是二进制内容,您将在这里损坏您的内容。相反,使用res.send(data)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42633702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档