2015-09-05 73 views
2

我正尝试使用ruby aws sdk将图像上传到s3。如果我不设置content_type,我可以上传base64字符串。如果我将content_type设置为image/png,则上传只是通用图像缩略图。将字节或base64字符串上传到s3 ruby​​ sdk

obj = #<Aws::S3::Object bucket_name="mybucket", key="test"> 

>> params[:file] 
>> "data:image/png;base64,iVB...." 

obj.put(body: params[:file], content_type: 'image/png', content_encoding: 'base64') 

如何将一个Base64字符串上传到s3?我也开放给上传的字节,如果这是更直接

+0

您是否设法解决这个问题? –

+0

@ChristianFazzini是的。我将添加一些代码 – user2954587

回答

0

我管理这个使用下面的代码

file = params[:file] 
s3 = Aws::S3::Resource.new 
obj = s3.bucket('my_bucket').object("my_path").upload_file(file.tempfile) 
3

我设法得到它与put工作来解决,而不是upload_fileput更有意义,因为您试图上传编码为base64数据uri字符串的图像。

假设你的数据URI字符串的样子:

string = 'data:image/jpeg;base64,<base_64_string>' 

的关键是要<base_64_string>部分进行解码,并在put方法发送到body

body = Base64.decode64(string.split(',')[1]) 

s3 = Aws::S3::Resource.new 
s3.bucket(ENV['AWS_BUCKET_NAME']).object(key).put(body: body, acl: 'public-read', content_type: 'image/jpeg', content_encoding: 'base64') 

这里假设你正在使用的AWS Ruby库https://github.com/aws/aws-sdk-ruby

+0

由于您在上传数据之前解码数据,因此我会说'content_encoding:'base64''并不是必需的 – mariowise