【发布时间】:2018-07-12 12:17:42
【问题描述】:
由于某种原因,使用 Node AWS SDK S3.upload 方法无法完成分段上传。
从浏览器接收上传的可读流设置为Body(可读流可以毫无问题地通过管道传输到文件 writableStream)。
S3.upload 被赋予以下选项对象:
{
partSize: 1024*1024*5,
queueSize: 1
}
当尝试上传约 8.5mb 的文件时,该文件完全是从浏览器发送的,但从 S3.upload 返回的请求会不断触发“httpUploadProgress”事件,表明所有字节都已上传。不断收到以下内容,直到发生错误:
progress { loaded: 8832825,
total: 8832825,
part: 1,
key: 'c82d3ef1-5d95-47df-aaa9-2cee48afd702' }
progress { loaded: 8832825,
total: 8832825,
part: 1,
key: 'c82d3ef1-5d95-47df-aaa9-2cee48afd702' }
progress { loaded: 8832825,
total: 8832825,
part: 1,
key: 'c82d3ef1-5d95-47df-aaa9-2cee48afd702' }
RequestTimeout: Your socket connection to the server was not read from
or written to within the timeout period. Idle connections will be
closed.
进度加载字段显示它已加载总字节数,但上传从未完成。甚至可读流上的end 事件也会触发。
SDK 本身的控制台日志显示 S3.upload 会消耗可读流中的所有可用数据,即使部分大小设置为 5mb 且队列大小设置为 1。
部件大小和队列大小是否会影响 S3.upload 的正确使用?如何进一步调查这个问题?
【问题讨论】:
-
如何去掉内容长度?喜欢它是在 aws 配置级别还是来自文件属性?
-
这实际上是服务器时间问题。您从中运行上传的服务器上的时间需要接近 S3 存储桶的时区。
标签: amazon-s3 file-upload aws-sdk aws-sdk-js aws-sdk-nodejs