【发布时间】:2016-07-18 17:16:39
【问题描述】:
在aws-sdk的S3类中,upload()和putObject()有什么区别?他们似乎在做同样的事情。为什么我可能更喜欢其中一个?
【问题讨论】:
标签: amazon-web-services amazon-s3
在aws-sdk的S3类中,upload()和putObject()有什么区别?他们似乎在做同样的事情。为什么我可能更喜欢其中一个?
【问题讨论】:
标签: amazon-web-services amazon-s3
使用 AWS SDK upload() 优于 putObject() 的优势如下:
【讨论】:
putObject() 而不是upload()?
upload() 还是关于putObject()。当您说“您可以用于进度报告”时。 - 究竟使用哪个功能? upload() 或 putObject()?
upload() 允许您控制对象的上传方式。例如,您可以定义并发和部分大小。
来自他们的docs: 如果有效负载足够大,则使用部分的智能并发处理上传任意大小的缓冲区、blob 或流。
我发现的一个具体好处是upload() 将接受没有定义内容长度的流,而putObject() 不接受。
这很有用,因为我有一个允许用户上传文件的 API 端点。该框架以没有内容长度的可读流的形式将文件传递给我的控制器。我不必测量文件大小,只需将其直接传递给upload() 调用即可。
【讨论】:
在查找相同信息时,我偶然发现:https://aws.amazon.com/blogs/developer/uploading-files-to-amazon-s3/
这个来源有点过时(引用而不是 upload_file() 和 put() - 或者它可能是 Ruby SDK?),但看起来 putObject() 用于比 upload() 更小的对象。
它推荐upload()并说明原因:
这是使用 SDK 将文件上传到 桶。使用这种方法有以下好处:
- 管理大于 15MB 的对象的分段上传。
- 正确地以二进制模式打开文件以避免编码问题。
- 使用多个线程并行上传大型对象的各个部分。
然后覆盖putObject()操作:
对于较小的对象,您可以选择使用
#put。
编辑:我的.upload() 上的.abort() 操作出现问题,发现这很有帮助:abort/stop amazon aws s3 upload, aws sdk javascript
现在我来自https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html 的各种其他事件也正在触发!对于.upload(),我只有“httpUploadProgress”。
【讨论】:
这个问题是大约六年前提出的,我在搜索有关最新 AWS Node.js SDK (V3) 的信息时偶然发现了这个问题。 SDK 的 V2 支持“upload”和“putObject”功能,而 V3 SDK 仅支持“Put Object”功能作为“PutObjectCommand”。 “UploadPartCommand”和“UploadPartCopyCommand”支持分段上传功能,但V2中不支持独立的“上传”功能,也没有“UploadCommand”功能。
因此,如果您迁移到 V3 SDK,您将需要迁移到 Put Object。 Get Object 在 V3 中也有所不同。不再返回缓冲区,而是返回可读流或 Blob。因此,如果您通过“Body.toString()”获取数据,您现在必须实现流读取器或处理 Blob。
【讨论】: