我正在使用此模块将文件上传到亚马逊
https://www.npmjs.com/package/streaming-s3 ,如果文件小于或等于 5 MB,则可以正常工作。
我尝试上传大小为 6 MB 的 PDF 文件。它显示上传成功,但是当我尝试通过 aws 打开该文件时。
显示无法加载 PDF 文档
当我在 AWS 上检查大小时,它显示 5 MB。
我正在使用以下代码在AWS上上传
var options = {
concurrentParts: 2,
waitTime: 20000,
retries: 2,
maxPartSize: 10 * 1024 * 1024
};
//call stream function to upload the file to s3
var uploader = new streamingS3(fileReadStream, config.aws.accessKey, config.aws.secretKey, awsHeader, options);
//start uploading
uploader.begin();// important if callback not provided.
// handle these functions
uploader.on('data', function (bytesRead) {
console.log(bytesRead, ' bytes read.');
});
uploader.on('part', function (number) {
console.log('Part ', number, ' uploaded.');
});
// All parts uploaded, but upload not yet acknowledged.
uploader.on('uploaded', function (stats) {
console.log('Upload stats: ', stats);
});
uploader.on('finished', function (response, stats) {
console.log(response);
logger.log('info', "UPLOAD ", response);
cb(null, response);
});
uploader.on('error', function (err) {
console.log('Upload error: ', err);
logger.log('error', "UPLOAD Error: ", err);
cb(err);
});
对于小于 5 MB 的文件来说效果很好。
有什么想法吗?我需要在 AWS 上进行任何设置吗?
谢谢
最佳答案
这是通过分段文件上传 API 将内容传输到 S3 所需的功能,即使在 GB 大小的流上操作,也可以保持较低的内存使用率。该流通过以 5 MB 为单位将流刷新到 S3 来避免高内存使用量,这样它一次只能存储 5 MB 的流数据。
我们在这里面临的问题是下一部分没有添加到流中。
请参阅此链接了解端到端详细信息 https://www.npmjs.com/package/s3-upload-stream
您还可以跟踪上传进度,以使用调试问题
/* Handle progress. Example details object:
{ ETag: '"f9ef956c83756a80ad62f54ae5e7d34b"',
PartNumber: 5,
receivedSize: 29671068,
uploadedSize: 29671068 }
*/
upload.on('part', function (details) {
console.log(details);
});
即使文件上传完成。
upload.on('uploaded', function (details) {
console.log(details);
});
关于angularjs - AWS文件上传超过5mb-nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941723/