将字节或base64字符串上传到s3 ruby​​ sdk

时间:2015-09-05 23:28:00

标签: ruby amazon-web-services amazon-s3

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

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?如果更直接的话,我也可以上传为字节

2 个答案:

答案 0 :(得分:5)

我设法让它与put合作,而不是upload_fileput更有意义,因为您尝试上传编码为base64数据uri字符串的图像。

假设您的数据uri字符串如下:

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

关键是解码<base_64_string>部分并将其发送到body方法中的put

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')

这假设您正在https://github.com/aws/aws-sdk-ruby

使用AWS Ruby库

答案 1 :(得分:0)

我设法使用以下代码解决了这个问题

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