質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%

Q&A

解決済

1回答

823閲覧

リクエストデータから画像データを取得しようとした際、tmpフォルダが取れる

jem32o

総合スコア79

0グッド

0クリップ

投稿2022/08/20 00:49

ここに質問の内容を詳しく書いてください。

ajaxを使用して下記内容のフォームデータをPOSTでリクエストして画像アップロードをしようとした際$request['thumbnail']を渡してアップロード 処理をしようとしたら「Cannot use object of type Illuminate\Http\UploadedFile as array 」が出ていましたので、$request['thumbnail']の中身をログにだして確認したら/tmp/phpc9NVL」が取れます。
$requestのときは以下ログの内容が出ているのですが、なぜ$request['thumbnail']では「 'thumbnail' =>
Illuminate\Http\UploadedFile::__set_state(array〜」をとれないのでしょうか。
ソースに関して不足情報がありましたらおっしゃってください。

log

1// $request['thumbnail']のとき 2local.INFO: /tmp/phpc9NVL 3 4// $requestのとき 5local.INFO: array ( 6 'thumbnail' => 7 Illuminate\Http\UploadedFile::__set_state(array( 8 'test' => false, 9 'originalName' => 'test.jpeg', 10 'mimeType' => 'image/jpeg', 11 'error' => 0, 12 'hashName' => NULL, 13 )), 14 'title' => NULL, 15 ), 16)

実現したいこと

「/tmp/phpc9NVLI 」ではなく「'thumbnail' =>Illuminate\Http\UploadedFile::__set_state(array(〜」をとりたい

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

php

1 /** 2 * 下書きの保存画面 3 * @param Request $request 4 * @return \Illuminate\Contracts\Support\Renderable 5 */ 6 public function draft(Request $request) 7 { 8 $planService = new Plan\Insert(); 9 $validator = $planService->draftValidate($request); 10 $data = []; 11 if ($validator->fails()) { 12 $data['error'] = $validator->errors(); 13 return $data; 14 } 15 if (isset($request['thumbnail'])) { 16 $request['thumbnail_path'] = $planService->uploadThumbnail($request['thumbnail']); 17 } 18 return; 19 }

js

1// 確認画面遷移 2 $('#spot_draft_btn').click(function(){ 3 // バリデーションチェック 4 let formData = check(DRAFT); 5 if (formData['error'].length > 0) { 6 return; 7 } 8 9 $.ajax({ 10 type: "post", 11 url: "/plan/save-draft", 12 headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, 13 data: formData['form'], 14 dataType : "json", 15 processData: false, 16 contentType: false 17 }) 18 // Ajaxリクエストが成功した場合 19 .done(function(data){ 20 console.log(data); 21 }) 22 // Ajaxリクエストが失敗した場合 23 .fail(function(XMLHttpRequest, textStatus, errorThrown){ 24 alert('下書き保存に失敗しました。'); 25 }); 26 }); 27 28/** 29 * フォームデータ生成 30 * @param string flag 31 * @return array 32 */ 33function check(flag) { 34data = {'form': new FormData(), 'error' : {}}; 35 // thumbnailのフォームデータ格納 36 let thumbnail = document.getElementById('thumbnail'); 37 data['form'].append('thumbnail', ""); 38 if ($(thumbnail).val() != "") { 39 data['form'].append('thumbnail', $(thumbnail)[0].files[0]); 40 } 41// titleのバリデーションチェック 42 let title = document.getElementById('title'); 43 let error_title = document.getElementsByClassName('error_title'); 44 data['error'] = {'title' : ''}; 45 if ($(title).val() == "" && CONFIRM == flag) { 46 data['error']['title'] = 'タイトルが未入力です。'; 47 $(error_title).css('display', 'block').text(data['error']['title']); 48 } else if($(title).val().length > 100) { 49 data['error']['title'] = 'タイトルには100文字以内で入力てください。'; 50 $(error_title).css('display', 'block').text(data['error']['title']); 51 } 52 data['form'].append('title', ""); 53 // titleのフォームデータ格納 54 if (data['error']['title'] != "") { 55 $(error_title).css('display', 'block').text(data['error']['title']); 56 } else { 57 $(error_title).css('display', 'none'); 58 // XSS対策 59 data['form'].append('title', escapeHTML($(title).val())); 60 } 61return data; 62}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記をログに出したら「test.jpeg」が出ていたので、ログ上では「/tmp/phpc9NVL」になっていたけど「 'thumbnail' =>Illuminate\Http\UploadedFile::__set_state(array〜」が入っていたから処理場では正常だったので解決済

php

1$request['thumbnail']->getClientOriginalName()

投稿2022/08/20 23:42

jem32o

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問