C# - AWS S3使用PutObject或TransferUtility.Upload方法上传文件。哪种方式更好?

时间:2013-04-30 19:57:02

标签: c#-4.0 amazon-s3

我知道有两种方法可以在AWS S3中上传文件(即PutObject和TransferUtility.Upload)。有人可以解释一下要使用哪一个?

仅供参考,我的文件范围从1kb到250MB不等。

提前致谢。

2 个答案:

答案 0 :(得分:8)

  

亚马逊弃用S3 转移管理器并迁移到新版本   转移实用程序。转移实用程序是一个简单的界面,用于处理S3的最常见用途。它有一个构造函数,   需要 AmazonS3Client 的实例。使用它很容易   让开发者用更少的代码执行所有操作。

以下是使用Transfer Utility而非Transfer Manager的主要功能

  • 上传大文件时,TransferUtility使用多个帖子 一次上传单个上传的多个部分。处理时 大内容大小和高带宽,这可以提高吞吐量 显着.TransferUtility检测文件是否很大并切换到 分段上传模式。 分段上传带来的好处是 更好的性能,因为部件可以同时上传 好吧,如果有错误,只有个别部分必须 重试。
  • 大多数情况下,我们都会尝试在S3上上传过多的文件 上传时间,在那些情况下我们需要进度信息 例如字节传输的总数剩余的数量 要转移的数据。要跟踪当前的转移进度 Transfer Manager,开发人员将 S3ProgressListener 回调传递给 上传或下载,定期触发下面的方法。
  • 无法使用传输管理器暂停传输 基于流的上传或下载。但转移实用程序为我们提供 暂停和恢复选项,它还有一个基于单文件的方法 上传和下载。
  

transferUtility.upload(MY_BUCKET,OBJECT_KEY,FILE_TO_UPLOAD)   transferUtility.download(MY_BUCKET,OBJECT_KEY,FILE_TO_UPLOAD)

  • 传输管理器仅需要INTERNET权限。然而, 由于Transfer Utility 自动检测网络状态和 根据网络状态暂停/恢复传输 暂停传输实用程序的功能非常简单,因为所有传输都可以暂停和恢复。由于网络连接丢失,传输暂停,它将自动恢复,您无需采取任何操作。传输会自动暂停并且等待网络连接将具有状态。此外,Transfer Utility将有关传输的所有元数据存储到本地SQLite数据库,因此开发人员不需要保留任何内容。

注意: 其他一切都很好。但是转移实用程序不支持copy()API。要使用 AmazonS3Client copyObject()方法来完成它。

答案 1 :(得分:6)

基于Amazon docs,我会坚持TransferUtility.Upload

  

提供高级实用程序,用于管理与Amazon S3之间的传输。

     

TransferUtility提供了一个简单的API,用于将内容上载到Amazon S3并从中下载内容。它广泛使用Amazon S3分段上传来实现增强的吞吐量,性能和可靠性。

     

通过指定文件路径而不是流来上传大文件时,TransferUtility使用多个线程一次上传单个上传的多个部分。在处理大内容大小和高带宽时,这可以显着提高吞吐量。

但请注意可能的并发问题以及有关使用BeginUpload(异步版本)的建议,例如this related post