1

由于某种原因,使用 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 的正确使用?如何进一步调查这个问题?

4

1 回答 1

0

我必须使用 createMultipartUpload 和 uploadPart 来上传较大的 (8Mb) 文件。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#uploadPart-property

于 2022-01-11T16:06:17.727 回答