LoginSignup
23
21

More than 5 years have passed since last update.

[JavaScript] Ajaxでファイルをアップロード【jQuery不使用】

Last updated at Posted at 2015-12-12

JavaScript の XMLHttpRequest を用いたファイルのアップロード方法です。jQuery は使いません。
jQuery を使う方法はこちら

HTML

HTML
<form id="my_form">
    <input type="file" name="file_1">
    <button type="button" onclick="file_upload()">アップロード</button>
</form>

【注意】
ボタンに type="button" が無い場合は submit と見なされ、ボタン押下時にブラウザーが勝手にアップロードしてしまいます(現画面を再更新)。そのため、下記 JavaScript によるアップロード処理中には意図しない status が返ってくるため、成功したり失敗したり、不可解な動きとなります。

JavaScript

JavaScript
function file_upload()
{
    // フォームデータを取得
    var formdata = new FormData(document.getElementById("my_form"));

    // XMLHttpRequestによるアップロード処理
    var xhttpreq = new XMLHttpRequest();
    xhttpreq.onreadystatechange = function() {
        if (xhttpreq.readyState == 4 && xhttpreq.status == 200) {
            alert(xhttpreq.responseText);
        }
    };
    xhttpreq.open("POST", "http://your_site.com/upload.php", true);
    xhttpreq.send(formdata);
}

【補足】
xhttpreq.onreadystatechange = function(){ };
の部分は、

xhttpreq.onload = function(e){ };

または、

xhttpreq.upload.addEventListener("progress", function(e){ }, false);
xhttpreq.upload.addEventListener("load", function(e){ }, false);
xhttpreq.upload.addEventListener("error", function(e){ }, false);
xhttpreq.upload.addEventListener("abort", function(e){ }, false);

という書き方も出来ます。

PHP

PHP
<?php
// 一時アップロード先ファイルパス
$file_tmp  = $_FILES["file_1"]["tmp_name"];

// 正式保存先ファイルパス
$file_save = "/var/www/html/save/" . $_FILES["file_1"]["name"];

// ファイル移動
$result = @move_uploaded_file($file_tmp, $file_save);
if ( $result === true ) {
    echo "UPLOAD OK";
} else {
    echo "UPLOAD NG";
}
?>

(・o・ゞ いじょー。

参考URL

23
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
21