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

时间:2016-07-18 17:16:39

标签: amazon-web-services amazon-s3

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

3 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:22)

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

来自docs: 如果有效负载足够大,则使用智能并发处理部件来上传任意大小的缓冲区,blob或流。

我发现的一个具体好处是,upload()将接受未定义内容长度的流,而putObject()则不会。

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

答案 2 :(得分:3)

在查找相同的信息时,我遇到了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'。