画像をペーパークリップにアップロードして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}