【发布时间】:2015-11-19 13:33:21
【问题描述】:
我在 NodeJS 中使用请求模块从 AWS S3 读取数据。当我使用以下代码下载文件(docx 或图像或 pdf)时,它给了我一个无效/损坏的文件。但是当我下载 .txt 文件时,它并没有损坏,我可以在记事本中看到文件。
我做了一些谷歌搜索,并按照建议尝试将编码设置为二进制,但仍然没有给出所需的结果。
文件上传工作正常。而且我可以在 AWS 控制台中看到上传的文件。
文件下载代码
var s3 = new properties.AWS.S3();
var params = {Bucket: properties.AWS_BUCKET, Key: req.headers['x-org'] + "/" + "talk" + "/" + req.body.fileName};
s3.getSignedUrl('getObject', params, function (err, URL) {
if (err) {
console.log("Error inside the S3");
console.log(err, err.stack); // an error occurred
res.send(null);
} else {
console.log("After getObject:-" + URL);
request({
url: URL, //URL to hit
method: 'GET',
encoding: 'binary'
}, function (error, response, body) {
if (error) {
console.log(error);
} else {
//console.log(response.statusCode, body);
res.set('content-disposition', 'attachment; filename=' + req.body.fileName);
res.send(body);
}
});
}
});
更新:- 我缩小了错误范围,只是尝试通过从本地文件系统读取文件来发送文件。即使这样也给客户端上损坏的文件。 这是相同的代码
var filePath = path.join(__dirname, '..', '..', '..', 'downloads', req.body.fileURL);
var stat = fs.statSync(filePath);
var filename = path.basename(filePath);
var mimetype = mime.lookup(filePath);
console.log("mimetype=" + mimetype);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype + ";charset=UTF-8");
res.setHeader('Content-Length', stat.size);
var filestream = fs.createReadStream(filePath);
filestream.pipe(res);
【问题讨论】:
标签: node.js amazon-web-services amazon-s3