[解決済み] jQuery AJAX ファイルアップロード PHP
質問
イントラネットのページに簡単なファイルアップロードを実装したいのですが、できるだけ小さなセットアップでお願いします。
これは私のHTML部分です。
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
そして、これは私のJS jqueryスクリプトです。
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
ウェブサイトのルートディレクトリに "uploads" という名前のフォルダがあり、 "users" と "IIS_users" の変更権限を持っています。
ファイルフォームでファイルを選択してアップロードボタンを押すと、最初のアラートは "[オブジェクト FormData]" を返します。2番目のアラートは呼び出されず、" uploads" フォルダも空になっています!?
誰か、何が問題なのかを見つけるのを手伝ってくれませんか?
また、次のステップでは、サーバー側で生成された名前でファイル名を変更する必要があります。多分、誰かがこのための解決策も教えてくれるでしょう。
どのように解決するのですか?
アップロードディレクトリにファイルを移動させるために、サーバー上で実行するスクリプトが必要です。その
jQuery
ajax
メソッド (ブラウザのクライアント側で実行) がフォームのデータをサーバーに送信し、サーバー上で実行されているスクリプトがアップロードを処理します。
HTMLは問題ありませんが、JSのjQueryスクリプトをこのように更新してください。
(の後のコメントを探してください。
// <--
)
$('#upload').on('click', function() {
var file_data = $('#sortpicture').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);
alert(form_data);
$.ajax({
url: 'upload.php', // <-- point to server-side PHP script
dataType: 'text', // <-- what to expect back from the PHP script, if anything
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
alert(php_script_response); // <-- display response from the PHP script, if any
}
});
});
そして、サーバーサイドのスクリプトです。 PHP この場合
upload.php : サーバー上に配置され実行される PHP スクリプトで、ファイルを uploads ディレクトリに誘導します。
<?php
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
}
?>
あと、保存先ディレクトリについていくつか。
- を確認してください。 正しいサーバーパス つまり、PHPスクリプトの場所から始まって、アップロードディレクトリへのパスが何であるか、そして
- それが 書き込み可能 .
そして、PHPの関数について少し
move_uploaded_file
で使用されている
upload.php
スクリプトを使用します。
move_uploaded_file(
// this is where the file is temporarily stored on the server when uploaded
// do not change this
$_FILES['file']['tmp_name'],
// this is where you want to put the file and what you want to name it
// in this case we are putting in a directory called "uploads"
// and giving it the original filename
'uploads/' . $_FILES['file']['name']
);
$_FILES['file']['name']
はアップロードされた時のファイル名です。これを使う必要はありません。サーバーファイルシステムと互換性のある)任意の名前を付けることができます。
move_uploaded_file(
$_FILES['file']['tmp_name'],
'uploads/my_new_filename.whatever'
);
そして最後に、PHPを意識すること
upload_max_filesize
AND
post_max_size
の設定値を変更し、テストファイルがそのいずれかを超えていないことを確認してください。以下は、その方法についてのヘルプです。
PHPの設定を確認する
と、どのように
最大ファイルサイズと投稿の設定
.
関連
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] jQuery Ajax ファイルアップロード
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
JSアレイループと効率解析の比較
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueディレクティブv-bindの使用と注意点
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueでルートネスティングを実装する例
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid