PHPで<input type="file">に格納されたファイルをサーバーにアップロードするプログラムを作っています。PHPに値を渡すとき、ajaxを用いていて、ajax通信のプログラムは以下の通りとなります。
javascript
1function sendToPHP(type, phpFileName, cache, data, success, error, async, processData, contentType) { 2 $.ajax({ 3 type: type, 4 url: phpFileName, 5 cache: cache, 6 data: data, 7 dateType: 'json', 8 async: async, 9 processData: processData, 10 contentType: contentType 11 }).done(success).fail(error); 12}
ファイルをajaxに渡すプログラムは以下の通りです。
javascript
1function doUpload() { 2 // カテゴリを取得 3 var category = $('#category').val(); 4 // 選択したファイルを取得 5 var fileData = $('#fileData').prop('files')[0]; 6 var formData = new FormData(); 7 formData.append('file', fileData); 8 9 var success = function (data) { 10 alert("アップロードが完了しました"); 11 }; 12 13 var error = function (data) { 14 dispPHPError(data); // エラーを表示する 15 }; 16 17 // ajax経由でPHPに値を渡し実行 18 sendToPHP('POST', 'imageUpload.php', false, formData, success, error, false, false, false); 19}
ファイルアップロードするPHPのプログラムは以下の通りです。
php
1<?php 2 3class ImageUpload { 4 5 function ImageUploadMain() { 6 7 try { 8 9 header('Content-Type: application/json'); 10 session_start(); 11 12 if ( 0 < $_FILES['file']['error'] ) { 13 return 'アップロードに失敗しました。\n' . 'Error: ' . $_FILES['file']['error']; 14 } else { 15 move_uploaded_file($_FILES['file']['tmp_name'], $path . '../../../img/mon/' . $_FILES['file']['name']); 16 } 17 18 return 'アップロードに成功しました'; 19 20 } catch (Exception $e) { 21 22 return $e -> getMessage(); 23 24 } 25 26 } 27 28} 29 30$imageUpload = new ImageUpload(); 31echo json_encode($imageUpload -> ImageUploadMain()); 32 33?>
これで問題なくアップロードできますが、パラメータを1つPHPに与え、そのパラメータの値によって、アップロード先(ディレクトリ)を変更させるようにする為、以下のプログラムでやってみたのですが、うまくいきません。
javascript
1function doUpload() { 2 // カテゴリを取得 3 var category = $('#category').val(); 4 // 選択したファイルを取得 5 var fileData = $('#fileData').prop('files')[0]; 6 var formData = new FormData(); 7 formData.append('file', fileData); 8 9 var param = { 10 'category' : category, 11 'formData' : formData 12 }; 13 14 var success = function (data) { 15 alert("アップロードが完了しました"); 16 }; 17 18 var error = function (data) { 19 dispPHPError(data); // エラーを表示する 20 }; 21 22 // ajax経由でPHPに値を渡し実行 23 sendToPHP('POST', 'imageUpload.php', false, param, success, error, false, false, false); 24}
php
1<?php 2 3class ImageUpload { 4 5 function ImageUploadMain() { 6 7 try { 8 9 header('Content-Type: application/json'); 10 session_start(); 11 12 $category = $_POST['category']; 13 14 if ($category == 'Game') { 15 $folder= 'Game/'; 16 else { 17 $folder = ''; 18 } 19 20 if ( 0 < $_FILES['file']['error'] ) { 21 return 'アップロードに失敗しました。\n' . 'Error: ' . $_FILES['file']['error']; 22 } else { 23 move_uploaded_file($_FILES['file']['tmp_name'], $path . '../../../img/mon/' . $folder . $_FILES['file']['name']); 24 } 25 26 return 'アップロードに成功しました'; 27 28 } catch (Exception $e) { 29 30 return $e -> getMessage(); 31 32 } 33 34 } 35 36} 37 38$imageUpload = new ImageUpload(); 39echo json_encode($imageUpload -> ImageUploadMain()); 40 41?>
こうすると、ファイルアップロードはされず、結果は null が返ってきます。どうすればパラメータとファイルを同時に渡すことができますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。