画像をペーパークリップにアップロードしてs3に保存しようとしています。ただし、コンソールに次のエラーが表示されます
!! リクエストの処理中に予期しないエラーが発生しました: UTF-8 の無効なバイト シーケンス
この問題を解決する方法については、StackOverflow にいくつかの回答がありますが、ほとんどの回答は元の解決策が Rack の更新であることを示しています。しかし、私は Ruby 1.9.3 と Rails 3.1.3 を使用しており、Rack を持っていないと思います (Gem としてインストールしていませんよね??)。
私が試したファイル名はかなり単純なので、問題は実際のファイルにあると思いますが、エラーが発生しているアップロード変数をデバッグする方法がわかりません。Rails はこれらのエラーをログ ファイルに記録していないため、詳細はわかりません。
私のコントローラーは、ペーパークリップ github ドキュメントの例のように、かなり単純です。
デフォルト作成 wine_photo = WinePhoto.create(params[:wine_photo]) return render :json => wine_photo 終わり
もともと私はより一般的なものを使用していましたが
wine_photo - WinePhoto.new(params[:wine_photo]) wine_photo.save の場合 return render :json => wine_photo そうしないと return render :json => wine_photo.errors 終わり
私のモデル(非常に役立つとは思えません)は
クラス WinePhoto true validates_with AttachmentPresenceValidator, :attributes => :photo 所属先:ワイン 所属先:ユーザー def photo_url 写真のURL 終わり 終わり
Ruby Invalid Byte Sequence in UTF-8 のこの応答に基づいて、コントローラーで以下を試しました
デフォルト作成 wine_photo = WinePhoto.new(params[:wine_photo]) wine_photo.photo = IO.read(wine_photo.photo).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) ...
それでもエラーが発生しました。
このエンコーディングの問題を乗り越える方法について何か提案はありますか? アップロード中のファイルからエラーが発生していることを確認する方法はありますか?
私のアップロードコード(ajax)は
save_photo: function(){ var file = document.getElementById('file_api').files[0]; console.log(ファイル); var xhr = 新しい XMLHttpRequest(); if (xhr.upload && file.type == "image/jpeg" ) { // プログレスバーを作成 var o = document.getElementById("progress"); var progress = o.appendChild(document.createElement("p")); progress.appendChild(document.createTextNode("アップロード" + file.name)); // プログレスバー xhr.upload.addEventListener("進捗", 関数(e) { var pc = parseInt(100 - (e.loaded / e.total * 100)); progress.style.backgroundPosition = pc + "% 0"; }、 間違い); // ファイル受信/失敗 xhr.onreadystatechange = function(e) { if (xhr.readyState == 4) { progress.className = (xhr.status == 200 ? "成功" : "失敗"); } }; // アップロード開始 xhr.open("POST", document.getElementById("add_photo").action, true); xhr.setRequestHeader("X_FILENAME", file.name); xhr.send(ファイル); } }
パラメータfile
は
ファイル {webkitRelativePath: "", lastModifiedDate: Thu Nov 10 2011 09:40:39 GMT+1100 (AUS 東部夏時間), name: "WP_000012.jpg", type: "image/jpeg", size: 1344450}