こんばんは。きわさです。
XMLHttpRequestを使って非同期でファイルをアップロードしたかったため調べました。
HTMLにファイル送信フォームを作成
<form id='form1' method='POST' enctype='multipart/form-data'>
<input type='file' name='file1' />
<input type='button' value='upload' onclick='uploadFunc()' />
</form>
formタグで送信フォームを作成します。
ファイルを送信する場合はenctype=’multipart/form-data’が必要です。
アップロードするJavascript処理を作成
function uploadFunc() {
var formData = new FormData(document.getElementById('form1'));
var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload.php', true);
xhr.onreadystatechange = function() {
// レスポンス受信時処理
}
xhr.send(formData);
}
XMLHttpRequestを送信する処理を作成します。
送信するデータはformタグのIDから取得します。new FormData(document.getElementById(‘form1’))
アップロードファイルを受け取るPHP処理を作成
<?php
if(is_uploaded_file($_FILES["file1"]["tmp_name"])) {
$tmpPath = $_FILES["file1"]["tmp_name"];
$savePath = 'file/' . basename($_FILES["file1"]["name"]);
move_uploaded_file($tmpPath , $savePath);
echo 'OK';
} else {
echo 'ERROR';
}
?>
アップロードされたファイル情報は$_FILESに格納されます。
今回はinputタグのnameの値を’file1’にしたので$_FILES[“file1”]でアクセスできます。
$_FILES[“file1”][“tmp_name”]で、一時的に格納されるファイルパスを取得します。ほかにも“name”でファイル名、“size”でファイルサイズが取得できます。
is_uploaded_file()でアップロードされたファイルの有無をチェックします。
move_uploaded_file()で一時的に格納されているファイルを正式な場所へ移動します。
