节点aws-sdk s3文件上传大小

7
当使用aws-sdk npm插件来上传pdf文件到AWS S3时,可以使用以下代码上传大小为50kb的文件(用于nod.js):
var params = {
            Bucket: BUCKET, 
            Key: pdf_key, 
            Body: file,
            ContentType: 'application/pdf'
        };
        var s3 = new AWS.S3();

        s3.putObject(params, function(error, data) {
            console.log(data);
            console.log(error);
            if (error) {
                console.log(error);
                callback(error, null);
            } else {
                callback(null, pdf_key);
            }
        });

但是,即使指定了ContentLength,上传一个11MB的PDF文件时,上传仍然持续进行,即使设置了2分钟的超时时间。问题是如何让aws s3接受大型PDF文件?
更新:
我仍然没有找到任何关于这个问题的文档或答案。
第二次更新:
我将接受展示这个或其他可以做到这一点的框架的答案。我还需要该框架能够允许对象的身份验证读取。
第三次更新:
我现在已经让它工作了,但我还没有找到任何它不能工作的原因。
提前致谢!

我认为这不是代码问题。上传到S3通常很慢,网络波动可能会使其更加不可预测。如果您担心上传大文件,可以使用分段上传。以下是一个示例:https://gist.github.com/sevastos/5804803 - Sev
多部分上传听起来不错,但真的有必要吗?最大的PDF大约50MB。如果您在答案中写下它通常很慢等等,我可以接受它,因为我已经在我的工作网络上无需任何修改就使其正常运行了,这比我家里的网络更快。 - Johan S
1个回答

9

连接到S3并不快,而且根据网络波动的情况,你可能会遇到超时和其他奇怪的行为。

您提供的代码很好,但您可以利用分段上传来解决特别是对于大于5MB的文件的问题。

我制作了一个分段上传的草稿实现,并让它重试任何失败的部分上传多达3次,这也适用于小于5MB的文件。


谢谢,我现在会继续使用自己的代码,但如果问题再次出现,我知道该去哪里寻找。感谢您的回答! - Johan S
我正在尝试上传一个大约60MB的文件,而不使用multipart。奇怪的是,在我的本地开发环境中,它可以正常工作。但是在托管在AWS上的生产环境中,它会抛出错误。错误信息为:“(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.” - Shrey
你能给我一个示例吗?如果你想直接从URL流式传输文件到S3,它会是什么样子。我希望缓冲区可以直接从URL读取文件,而不需要先下载它,但我无法使其工作。 - greenymaster69

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接