upload()和putObject()之间的区别是将文件上传到S3?

cal*_*lum 45 amazon-s3 amazon-web-services

在aws-sdk的S3课堂上,upload()和之间的区别是putObject()什么?他们似乎做同样的事情.为什么我更喜欢一个而不是另一个?

err*_*07s 28

使用AWS SDK upload()putObject()param 之间的区别如下:

  • 如果上载完成时报告的MD5不匹配,则重试.
  • 如果文件大小足够大,它会使用分段上传来并行上传部分.
  • 根据客户端的重试设置重试.
  • 您可以使用进度报告.
  • 如果不提供,则基于文件扩展名设置ContentType.

  • 那么为什么有人更喜欢`putObject()`而不是`upload()`? (11认同)
  • 能详细说明一下吗?这些要点是关于“upload()”还是“putObject()”。当您说“您可以用于进度报告”时。- 具体使用哪个功能?`upload()` 还是 `putObject()`? (3认同)
  • putObject主要用于AWS S3的策略. (2认同)

rla*_*ay3 26

upload()允许您控制对象的上传方式.例如,您可以定义并发和部件大小.

从他们的文档:上传任意大小的缓冲区,blob或流,如果有效负载足够大,则使用部件的智能并发处理.

我发现的一个特定好处是upload()接受没有定义内容长度的流,而putObject()不是.

这很有用,因为我有一个允许用户上传文件的API端点.框架以可读流的形式将文件传递给我的控制器,没有内容长度.我不必测量文件大小,而是将其直接传递给upload()调用.


Dou*_*oug 8

在寻找相同的信息时,我遇到了:https : //aws.amazon.com/blogs/developer/uploading-files-to-amazon-s3/

这源是过时了一点(而不是引用upload_file()put()- ?也许它是Ruby SDK),但它看起来就像putObject()是为比更小的物体upload()

它建议upload()并具体说明原因:

这是使用 SDK 将文件上传到存储桶的推荐方法。使用这种方法有以下好处:

  • 管理大于 15MB 的对象的分段上传。
  • 以二进制模式正确打开文件以避免编码问题。
  • 使用多个线程并行上传部分大对象。

然后覆盖putObject()操作:

对于较小的对象,您可以选择使用#put

编辑:我在.abort()操作时遇到问题,.upload()发现这很有帮助:abort/stop amazon aws s3 upload, aws sdk javascript

现在我来自https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html 的各种其他事件也开始了!随着.upload()我只有“httpUploadProgress”。