【发布时间】:2019-10-20 04:18:16
【问题描述】:
我正在尝试通过 nodeJS 云函数将 Firebase 存储桶中的文件传输到客户端(浏览器)。客户端将使用file-saver.js在浏览器上开始下载。
这适用于text/plain mime 类型,但会生成带有图像和 png 的损坏文件。问题在于编码,因为我可以看到到达客户端的数据未正确编码。
这是客户端带有图像的示例响应:
data: "�PNG↵↵IHDR%�*���sBIT|d�...
我应该如何正确地将文件传回以保持正确的编码?
这是当前的云功能:
const filesBucket = admin.storage().bucket(FILES_BUCKET_NAME);
function getFile(fileName, res){
const filePath = fileName
const file = filesBucket.file(filePath)
res.setHeader('Content-Type', getMimeType(fileName));
res.setHeader('Content-Disposition', 'attachment; filename='+fileName);
file.createReadStream()
.on('error', err => {
// not good
})
.on('response', function(response) {
// ok
})
.on('end', function() {
// The file is fully downloaded.
})
.pipe(res); // pipe the file back to client
}
这是客户端部分:
export const getFile = (filename) =>{
...
axios.get(fileUrl, config)
.then(resp => {
downloadFile(resp.data, filename, getMimeType(filename))
}).catch(err => {
console.log("getCurrentUserFile | err", err)
reject(err)
})
function downloadFile(data, filename, mimeType){
var blob = new Blob([data], {type: mimeType});
FileSaver.saveAs(blob, filename);
}
【问题讨论】:
标签: javascript node.js encoding stream pipe