由于管道损坏,无法通过分段上传将大于 8GB 的​​文件上传到 Amazon S3

由于管道损坏,无法通过分段上传将大于 8GB 的​​文件上传到 Amazon S3

我根据以下示例代码实现了 S3 多部分上传,包括高级和低级版本 http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?HLuploadFileJava.htmlhttp://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?llJavaUploadFile.html

当我上传小于 4 GB 的文件时,上传过程顺利完成。当我上传 13 GB 的文件时,代码开始显示 IO 异常、管道损坏。重试后,仍然失败。

以下是重现该场景的方法。以 1.1.7.1 版本为例,

  1. 在美国标准区域创建新的存储桶
  2. 创建一个大型 EC2 实例作为客户端上传文件
  3. 在 EC2 实例上创建一个大小为 13GB 的文件。
  4. 在 EC2 实例的高级或低级 API S3 文档页面之一上运行示例代码
  5. 测试三个部分大小中的任一个:默认部分大小(5 MB)或将部分大小设置为 100,000,000 或 200,000,000 字节。

到目前为止,问题一直存在。我在这里附上了一个 tcpdump 文件供您比较。在那里,S3 端的主机不断重置套接字。

答案1

虽然这是 c# 代码,但它显示了我用来成功复制最大 15GB 文件的超时和部分大小设置。也许需要将 AutoCloseStream 设置为 false。

using (FileStream fileStream = File.OpenRead(file.FullName))
                    {

                        TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
                        {
                            AutoCloseStream = false,
                            Timeout = 1200000,
                            BucketName = Settings.Bucket,
                            Key = file.Name,
                            InputStream = fileStream,
                            PartSize = 6291456 // 6MB
                        };

                        Console.Write("{0}...", file.Name);
                        Begin();
                        tu.Upload(request);
                        End();
                        Console.WriteLine("Done. [{0}]", Duration());
                    }

相关内容