我尝试使用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?如果更直接的话,我也可以上传为字节
答案 0 :(得分:5)
我设法让它与put
合作,而不是upload_file
。 put
更有意义,因为您尝试上传编码为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')
使用AWS Ruby库
答案 1 :(得分:0)
我设法使用以下代码解决了这个问题
file = params[:file]
s3 = Aws::S3::Resource.new
obj = s3.bucket('my_bucket').object("my_path").upload_file(file.tempfile)