我有一个使用以下路由运行的快速服务器:
let req = request.get('/users/' + userId + '/files/' + file.name);
req.set('Authorization', 'Bearer ' + this.state.jsonWebToken);
req.end((err, resp) => {
let f = new File([resp.text], file.name, {type: resp.type});
fileSaver.saveAs(f);
});
在我的网络应用中,我正在调用此路线并尝试使用file-saver在本地保存文件:
wp_enqueue_script()
如果文件是纯文本,那么它可以正常工作,但对于像图像这样的其他文件类型我无法打开文件(它已经“损坏”)。
这就是响应的样子:
我是否需要先以某种方式解码数据?保存文件内容的正确方法是什么?
答案 0 :(得分:1)
我很久以前没有使用过快递,而且我在手机上打字,这似乎是一个编码问题,所以看起来你似乎是一个问题。发送原始图像,你需要在base64中编码,尝试类似:
//Here your saved file needs to be encoded to base 64.
var img = new Buffer(data, 'base64');
res.writeHead(200, {
'Content-Type': 'image/png',
'Content-Length': img.length
});
res.end(img);
数据是您保存的图像的位置,如果您可以渲染图像,只需添加标题以供下载或链接方法下载。
答案 1 :(得分:1)
如果您使用superagent
来执行请求,则可以将响应类型明确设置为"blob"
,这样可以防止任何尝试解码响应数据。二进制数据将以resp.body
:
req.responseType('blob').end((err, resp) => {
saveAs(resp.body, file.name);
});
答案 2 :(得分:1)
如果您想在页面中将图像作为附件下载,可以使用res
exports.getUserFile = function (req, resp) {
let filePath = path.join(__dirname, 'storage', req.params.fileName);
var check = fs.readFileSync(__dirname+req.params.fileName);
resp.attachment(req.params.fileName); // The name of the file to be saved as. Eg Picture.jpg
res.resp(check) // Image buffer read from the path.
});
}
参考:
http://expressjs.com/en/api.html#res.attachment
http://expressjs.com/en/api.html#res.end
希望这有帮助。