AWS文件上传量超过5mb - nodejs

时间:2015-10-05 05:18:37

标签: angularjs node.js amazon-web-services amazon-s3

我正在使用此模块将文件上传到亚马逊

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上进行任何设置吗?

由于

1 个答案:

答案 0 :(得分:0)

这是通过多部分文件上传API将内容管道传输到S3所需的功能,即使在大小为GB的流上操作,也可以保持较低的内存使用率。这个流通过将流刷新到3 MB的部分来避免高内存使用,这样它一次只能存储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);
});