9

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

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

提前致谢。

4

2 回答 2

10

Amazon 弃用了 S3 Transfer Manager并迁移到了新的 Transfer Utility。Transfer Utility 是一个用于处理 S3 最常见用途的简单接口。它有一个构造函数,需要一个AmazonS3Client实例。使用它非常简单,让开发人员用更少的代码执行所有操作。

以下是通过 Transfer Manager 使用 Transfer Utility 的主要功能

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

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

  • Transfer Manager 只需要 INTERNET 权限。但是,由于传输实用程序自动检测网络状态并 根据网络状态暂停功能暂停/恢复传输实用程序很容易,因为所有传输都可以暂停和恢复。传输因网络连接丢失而暂停,它将自动恢复,您无需执行任何操作。自动暂停并等待网络连接的传输将具有状态。此外,传输实用程序将有关传输的所有元数据存储到本地 SQLite 数据库,因此开发人员不需要坚持任何东西。

注意: 其他一切都很好。但是 Transfer Utility 不支持 copy() API。要完成它,请使用AmazonS3Client的 copyObject()方法。

于 2015-07-13T10:38:57.803 回答
8

基于亚马逊文档,我会坚持TransferUtility.Upload

提供用于管理进出 Amazon S3 的传输的高级实用程序。

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

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

但是请注意可能的并发问题以及关于使用 BeginUpload(异步版本)的建议,就像在这个相关的帖子中一样

于 2013-04-30T22:31:23.147 回答