環境
wsl2 Ubuntu18.04
ruby 2.5.1p57
rails 4.0.0
実現したいこと
ajaxでファイルをrailsにuploadする (今は普通にsubmitしている)
困っていること
ajaxのrequestのデータの作り方。
submitで送られているファイルデータを作成してサーバー側に送ればokと判断
↓
サーバー側でrequestのデータの中身を確認
{ "file"=>#<ActionDispatch::Http::UploadedFile:0x0055d8dc65deb0 @tempfile=#<Tempfile:/tmp/RackMultipart20200619-23-1ajva0e>, @original_filename="hogeA.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"[hoge_groups][][file]\"; xxxfilename=\"hogeA.png\"\r\nContent-Type: image/png\r\n"> "file" => (二個目のデータ1っ個目と同じように)... }
このデータをクライエント側で作ればよいが、tempfileやActionDispatchなどをどのように作成すれば良いのか不明で質問させていただきました。
よろしくお願いいたします。
*追記
サーバー側で送られるデータは下記の通りでしたが (ここではdataという変数とします)
{ "file"=>#<ActionDispatch::Http::UploadedFile:0x0055d8dc65deb0 @tempfile=#<Tempfile:/tmp/RackMultipart20200619-23-1ajva0e>, @original_filename="hogeA.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"[hoge_groups][][file]\"; xxxfilename=\"hogeA.png\"\r\nContent-Type: image/png\r\n"> "file" => (二個目のデータ1っ個目と同じように)... }
実際にrails内でsaveされているデータはここのfile部分(data[:file])のみでした。
"file"=>#<ActionDispatch::Http::UploadedFile:0x0055d8dc65deb0
となると、このデータをjs側で作成するのがさらに分からなくなりましたが。。。汗
*追記2
下記の様なデータをFormData.append('file', data)としてサーバーに送る
(このデータはinputで得られたfile objectです)
サーバー側でこの値を Rails.logger.info を使用し表示させると下記のように表示される
[object File]
ちなみにviewから普通にsubmitさせた場合、サーバー側では↓のように表示
#<ActionDispatch::Http::UploadedFile:0x0055ee195fd950>
[object File]では値が取得できないのか、保存もされません。
何か勘違いしていないか確認できたら幸いです。
追記3
[object File]はただの文字列でしたので、FileReaderクラスを使用し、ファイルそのもののデータを送信してみましたが結果は一緒でした
//こういうファイルそのもののデータ data:image/png;base64,iVBORw0...................................
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。