有没有办法在Amazon S3上连接小于5MB的小文件。 由于小文件,多部件上传不正常。Amazon S3连接小文件
这不是一个有效的解决方案来拉下所有这些文件并进行连接。
那么,有人可以告诉我一些API来做到这一点吗?
有没有办法在Amazon S3上连接小于5MB的小文件。 由于小文件,多部件上传不正常。Amazon S3连接小文件
这不是一个有效的解决方案来拉下所有这些文件并进行连接。
那么,有人可以告诉我一些API来做到这一点吗?
Amazon S3不提供连接功能。它主要是一个对象存储服务。
您需要一些过程来下载对象,合并它们,然后再次上传它们。执行此操作的最有效方法是并行下载对象,以充分利用可用带宽。但是,编码更复杂。
我建议在“云中”进行处理以避免必须通过Internet下载对象。在上进行操作Amazon EC2或AWS Lambda会更高效,成本更低。
旧评论,但这不完全正确。你可以有一个5MB的垃圾对象坐在S3上,并与它连接,其中第1部分= 5MB垃圾对象,第2部分=你想要连接的文件。继续为每个片段重复此操作,最后使用范围副本去除5MB垃圾。 – wwadge
@wwadge哦!这是阴险和*非常*酷!使用[上传零件 - 复制](http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)从多个文件复制数据,就好像它们是同一文件的一部分一样。整齐! –
编辑:没有看到5MB的要求。由于这个要求,这种方法将不起作用。
虽然可以下载,并通过 的EC2实例中重新将数据上传到S3,更有效的办法是指示S3到 使用使一个内部复制在版本1.10.0中为Ruby引入了新的copy_part API操作 。
代码:
require 'rubygems'
require 'aws-sdk'
s3 = AWS::S3.new()
mybucket = s3.buckets['my-multipart']
# First, let's start the Multipart Upload
obj_aggregate = mybucket.objects['aggregate'].multipart_upload
# Then we will copy into the Multipart Upload all of the objects in a certain S3 directory.
mybucket.objects.with_prefix('parts/').each do |source_object|
# Skip the directory object
unless (source_object.key == 'parts/')
# Note that this section is thread-safe and could greatly benefit from parallel execution.
obj_aggregate.copy_part(source_object.bucket.name + '/' + source_object.key)
end
end
obj_completed = obj_aggregate.complete()
# Generate a signed URL to enable a trusted browser to access the new object without authenticating.
puts obj_completed.url_for(:read)
限制(其中包括)
这些文件是否已经在S3上?如果没有,你不能在上传之前连接(或压缩)吗? –