はじめに
Laravel初心者です
質問概要
jqueryのajaxを使って、ファイルがドラッグされたらサーバにアップロードしたい。
しかし、405レスポンスが返ってくる。
質問
前回の質問で、ファイルをドラッグ・アンド・ドロップでサーバにAjax通信でファイルをアップロードすることができました。
その開発環境が、
- Windows10
- Larabel5.5
- XAMPP
- PHP 7.1.4 (cli)
なのですが、これを本番環境のサーバ
- Windows Server 2016
- IIS10
- PHP 7.1.6 (cli)
にコピー(デプロイ?)したところ、開発環境(XAMPP)では正常にアップロードできていたものが、
何故か405エラー(Method Not Allowed)が返ってきます。
LaravelはIISに対応してない……というわけではないと思いますが、
何故このような現象が起こるのでしょうか?
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
コード
ルーター(web.php)
php
1/** 2 * 管理ページ 3 * ファイルのアップロード 4 */ 5Route::match(['post'], '/admin/file/upload/', 'AdminController@fileUpload')->middleware('articlepost');
ミドルウェアは、パスワード処理系の為省略
コントローラー(AdminController.php)
php
1<?php 2 3namespace App\Http\Controllers; 4 5use App\User; 6 7use Illuminate\Http\Request; 8use Session; 9use App\Http\Controllers\Controller; 10use App\Model\Dao\ArticleDao; 11use Illuminate\Support\Facades\Storage; 12 13 14/** 15 * articleページのコントローラー 16 */ 17class AdminController extends Controller 18{ 19 20// 中略 21 22 /** 23 * ファイルのアップロード時に通るコントローラー 24 * 25 * @author Nな人<nnahito> 26 * @return view 27 */ 28 public function fileUpload(Request $request) { 29 30 // ファイルが来ているかのチェック 31 if ( $request->hasFile('file') !== true ) { 32 return response()->json(['status' => 'false']); 33 } 34 35 // 入力ファイルの取得 36 $file = $request->file('file'); 37 38 // ファイルの保存(戻り値に保存作のパス) 39 $path = $request->file('file')->store('upfiles'); 40 41 // ファイルが取得できているかのチェック 42 if ( $request->file('file')->isValid() !== true ) { 43 // 失敗ならエラー 44 return response()->json(['status' => 'false']); 45 } 46 47 // 可視性の取得 48 $visibility = Storage::getVisibility($path); 49 50 // アップロード成功ならファイルパスも返す 51 return response()->json(['status' => 'true', 'path' => $path, 'visibility' => $visibility]); 52 53 } 54 55} 56
ビューのJavaScript部分
JavaScript
1 <script> 2 3 // ページのローディングが終わったら 4 $(document).ready(function(){ 5 // テキストエリアのサイズ変更トリガーを実行 6 $('#content').trigger('autoresize'); 7 }); 8 9 10 // ブラウザ上でファイルを展開する挙動を抑止 11 function onDragOver(event) { 12 event.preventDefault(); 13 } 14 15 // Drop領域にドロップしたファイル情報を読み取り 16 function onDrop(event) { 17 // ブラウザ上でファイルを展開する挙動を抑止 18 event.preventDefault(); 19 20 // ドロップされたファイルのfilesプロパティを参照 21 var files = event.dataTransfer.files; 22 if (files.length >= 1) { 23 alert(files[0].name + ":" + files[0].size); 24 FileUpload(files[0]); 25 } 26 } 27 28 // ファイルアップロード 29 function FileUpload(f) { 30 var formData = new FormData(); 31 formData.append('file', f); 32 $.ajax({ 33 type: 'POST', 34 dataType : "json", 35 contentType: false, 36 processData: false, 37 url: '/admin/file/upload/', 38 data: formData, 39 headers: { 40 'X-CSRF-TOKEN': '{{ csrf_token() }}' 41 } 42 }).done(function(json) { 43 console.log(json); 44 var textarea = $('#content').val(); 45 $('#content').val(textarea + "\n" + json['path']); 46 47 }).fail(function(jqXHR, textStatus, errorThrown) { 48 console.log(jqXHR); 49 console.log(errorThrown); 50 alert(textStatus); 51 52 }); 53 } 54 55 </script>
IIS10で返ってくる値
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/15 00:30
退会済みユーザー
2017/11/15 02:37
2017/11/15 04:57
2017/11/15 15:31