前提・実現したいこと
railsのviewにs3にアップロードしている画像をアップしたいのですが、文字化けしていて
画像を取得することが出来ません。ググりましたが同じような現象はほぼなく、手詰まりになりました。
良い方法がありましたらお願いします。
view
1<%= image_tag refer_to_s3 %>
controller
1private 2def refer_to_s3 3 myBucket = '[bucket-name]' 4 bucket = Aws::S3::Client.new( 5 :region => 'ap-northeast-1', 6 :access_key_id => [Rails.application.secrets_access_key_id], 7 :secret_access_key => [Rails.application.secrets_secret_key] 8 ) 9 pic = bucket.get_object(:bucket => myBucket, :key => "[image_name]").body.read 10 pic_data = "data:image/png;base64," + pic 11 end
発生している問題・エラーメッセージ
error
1invalid byte sequence in UTF-8
試したこと
- こちらのブログ-sonots-blogに挙がっていた対処法を実施。
.body.read
の後に下記を追加。
.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => "?").encode("UTF-8")
(エラーは無くなりましたが画像ではなく写真のアイコンが表示されます。)
- s3側のCORSの設定でUTF-8を明示。
CORS
1<?xml version="1.0" encoding="UTF-8"?> 2<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 3<CORSRule> 4 <AllowedOrigin>*</AllowedOrigin> 5 <AllowedMethod>GET</AllowedMethod> 6 <MaxAgeSeconds>3000</MaxAgeSeconds> 7 <AllowedHeader>Authorization</AllowedHeader> 8 <AllowedHeader>Content-*</AllowedHeader> 9</CORSRule> 10</CORSConfiguration>
(変わりありませんでした。CORSの設定についてはあまり理解していません。)
- s3へのアップロードする際に
charset=UTF-8
を指定すればよいと考えましたがresourceメソッドupload_file
にそれらしきオプションがなく断念。
####参考
コンソールに出るget_object
の結果の文字列は下記のようなものです。
\u001EK?? Y\u0014]??Y-?t???\u0016k????(?1 t?\u0019\u001D\u001En??O2\u000E?????G??X?\u007FpGĺ\u007F?Dϔ?????8{)U3??/ԵUx4\u0013\u0018\rz?i?\v?r?^df?5?\???\eC?^?b?R????51???x??^W]<????W????\v}5;-???YW???.'\
補足情報(FW/ツールのバージョンなど)
開発環境:could9
ruby: 2.3.1p112
rails: 4.2.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/21 03:25
2018/11/23 07:58