由于pipe道损坏,无法将多于8GB的file upload到Amazon S3

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

当我上传大小小于4 GB的文件时,上传过程完成没有任何问题。 当我上传一个13 GB的文件时,代码开始显示IOexception,pipe道破损。 重试后,仍然失败。

这是重复这种情况的方法。 拿1.1.7.1发布,

  1. 在美国标准地区创build一个新的桶
  2. 创build一个大的EC2实例作为客户端上传文件
  3. 在EC2实例上创build一个大小为13GB的文件。
  4. 在EC2实例的高级或低级API S3文档页面上运行示例代码
  5. testing三个零件尺寸之一:默认零件尺寸(5 MB)或将零件尺寸设置为100,000,000或200,000,000字节。

到目前为止,问题一直存在。 我在这里附上一个tcpdump文件供您比较。 在那里,S3侧的主机不断地重新设置sockets。

尽pipe这是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()); }