我有一个rails应用程序,在控制器操作中,我可以创建一个多部分上传,如下所示:
def create
s3 = AWS::S3.new
bucket = s3.buckets["my_bucket"]
key = "some_new_file_name.ext"
obj = bucket.objects[key]
mpu = obj.multipart_upload
render json: {
:id => mpu.id
}
end
所以现在客户端有了多部分上传id,她可以用浏览器将部分上传到aws。我希望创建另一个动作,一旦上传完成,就会组装零件。类似于:
def assemble
s3 = AWS::S3.new
bucket = s3.buckets["my_bucket"]
key = params['key']
bucket.objects[key].multipart_upload.complete
render json: { :status => "all good" }
end
但这不起作用。如何检索对multipartUpload对象的引用,或者创建一个带有键或id的新引用,以便对其调用"complete"方法?任何见解都值得赞赏
我在Client类的文档中找到了这个方法,并使其工作如下:
client = AWS::S3::Client.new
# reassemble partsList
partsList = []
params[:partsList].each do |key, pair|
partsList.push pair
end
options = {
:bucket_name => 'my_bucket',
:key => params[:key],
:upload_id => params[:upload_id],
:parts => partsList
}
client.complete_multipart_upload(options)