はじめに
Laravel初心者です。
環境
Windows10
Larabel5.5
XAMPP
PHP 7.1.4 (cli)
質問
Laravel5.5で、Ajax通信を用いたファイルのアップロードができません。
どうやっても、move_uploaded_file
を実行しようとすると、Internet Server Error(500)が返却されてしまいます。
これは何故なのでしょうか?
ご存じの方がいらっしゃいましたら、ご教授いただけると幸いです。
ずっとレガシーコードで書いていたので、フレームワークを触ったことがなく、全然先に進めません……
コード
表面JavaScrip
javascript
1<script> 2 3 // ブラウザ上でファイルを展開する挙動を抑止 4 function onDragOver(event) { 5 console.log('aaa'); 6 event.preventDefault(); 7 } 8 9 // Drop領域にドロップしたファイル情報を読み取り 10 function onDrop(event) { 11 console.log('iii'); 12 // ブラウザ上でファイルを展開する挙動を抑止 13 event.preventDefault(); 14 15 // ドロップされたファイルのfilesプロパティを参照 16 var files = event.dataTransfer.files; 17 if (files.length >= 1) { 18 alert(files[0].name + ":" + files[0].size); 19 FileUpload(files[0]); 20 } 21 } 22 23 // ファイルアップロード 24 function FileUpload(f) { 25 console.log('uuuu'); 26 var formData = new FormData(); 27 formData.append('file', f); 28 $.ajax({ 29 type: 'POST', 30 dataType : "text", 31 contentType: false, 32 processData: false, 33 url: '/admin/file/upload/', 34 data: formData, 35 headers: { 36 'X-CSRF-TOKEN': '{{ csrf_token() }}' 37 } 38 }).done(function(json) { 39 alert(json); 40 41 }).fail(function(jqXHR, textStatus, errorThrown) { 42 43 console.log(jqXHR); 44 alert(textStatus); 45 46 }); 47 } 48 49 </script>
PHPコントローラー
PHP
1namespace App\Http\Controllers; 2 3use App\User; 4use Request; 5use Session; 6use App\Http\Controllers\Controller; 7use App\Model\Dao\ArticleDao; 8 9class AdminController extends Controller 10{ 11 /** 12 * ファイルのアップロード時に通るコントローラー 13 * 14 * @author Nな人<nnahito> 15 * @return view 16 */ 17 public function fileUpload(Request $request) { 18 19 // アップロードファイルが来ているか 20 if ( is_uploaded_file($_FILES['file']['tmp_name']) === true ) { 21 22 // 来ていたら、ファイルをアップロードできたか 23 if( move_uploaded_file($_FILES['file']['tmp_name'], '/upfiles/'.$_FILES['file']['name']) ){ 24 25 // アップロード成功 26 return response()->json(['status' => 'true']); 27 28 } else { 29 30 // アップロード失敗 31 return response()->json(['status' => 'false']); 32 33 } 34 35 } 36 37 // そもそもにアップロード失敗 38 return response()->json(['status' => 'false']); 39 40 } 41}
修正
ご指摘を受け、PHPのコントローラーを次のように書き直しましたがファイルのアップロードができませんでした……
該当フォルダの権限は777を与えております。
PHP
1public function fileUpload(Request $request) { 2 3 // ファイルが来ているかのチェック 4 if ( $request->hasFile('file') !== true ) { 5 return response()->json(['status' => 'false']); 6 } 7 8 // 入力ファイルの取得 9 $file = $request->file('file'); 10 11 // ファイルの保存(戻り値に保存作のパス) 12 $path = $request->file('file')->store('upfiles'); 13 14 // ファイルが取得できているかのチェック 15 if ( $request->file('file')->isValid() !== true ) { 16 // 失敗ならエラー 17 return response()->json(['status' => 'false']); 18 } 19 20 // アップロード成功ならファイルパスも返す 21 return response()->json(['status' => 'true', 'path' => $path]); 22 23 }
参考
回答3件
あなたの回答
tips
プレビュー