JavaScriptを利用してファイルをアップロードする - HTMLHttpRequestを利用したファイルのアップロード - JavaScript
JavaScriptを利用してファイルをアップロードするコードを紹介します。
概要
JavaScriptでファイルをアップロードする方法には何種類かありますが、この記事ではHTMLHttpRequestを利用してファイルのアップロードをするコードを紹介します。なお、フォームのPostを実行してファイルをアップロードする場合は、JavaScriptからフォームのポストを実行する
こちらの記事のコードを参照してください。また、HTML5のFileAPI/Fileオブジェクトを利用したファイルのアップロードについては
こちらの記事を参照してください。
プログラム
コード
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript">
function ExecUpload() {
var formObj = document.getElementById("form1")
var data = new FormData(formObj);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
};
xmlhttp.open("POST", "GetForm03.ashx", true);
xmlhttp.send(data);
}
</script>
</head>
<body>
<form id="form1">
<div>File-01<input name="File01" type="file" /></div>
<a href="javascript:void(0);" onclick="ExecUpload();">アップロード</a>
</form>
</body>
</html>
ポストされたファイルを受け取る側の実装です。今回はC#のジェネリックハンドラで実装しています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace FormFileAccept
{
/// <summary>
/// GetForm03 の概要の説明です
/// </summary>
public class GetForm03 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.HttpMethod == "GET") {
context.Response.ContentType = "text/plain";
context.Response.Write("OK+");
}
else if (context.Request.HttpMethod == "POST") {
HttpPostedFile file01 = context.Request.Files["File01"];
string phyPath = context.Server.MapPath("/");
file01.SaveAs(phyPath + System.IO.Path.GetFileName(file01.FileName));
context.Response.ContentType = "text/plain";
context.Response.Write("OK");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
解説
ページ内の[アップロード]リンクがクリックされると、下記のExecUpload()関数を呼び出します。
function ExecUpload() {
var formObj = document.getElementById("form1")
var data = new FormData(formObj);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
};
xmlhttp.open("POST", "GetForm03.ashx", true);
xmlhttp.send(data);
}
下記コードで、フォームのIDを与えてgetElementById()メソッドを呼び出し、フォームの要素のおぶえj区とを取得します。
var formObj = document.getElementById("form1")
FormDataオブジェクトを作成します。コンストラクタの引数に フォームの要素のオブジェクトを与えることで、与えたフォームのFormDataオブジェクトを作成できます。
var data = new FormData(formObj);
下記コードで、XMLHttpRequestオブジェクトを作成し、POSTでデータを送信します。送信するデータは、XMLHttpRequestオブジェクトのsend()メソッドの第一引数に与えます。今回の例では、先に作成した、FormDataオブジェクトを与えます。送信の完了処理はXMLHttpRequestオブジェクトのonreadystatechange イベントに実装します。今回の実装では、アラートダイアログを表示し、サーバーからのレスポンスデータをダイアログに表示します。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
};
xmlhttp.open("POST", "GetForm03.ashx", true);
xmlhttp.send(data);
サーバー側のジェネリックハンドラーについては
こちらの記事の解説を参考にしてください。
実行結果
プロジェクトを実行し、Form03.html ファイルを開きます。下図の画面が表示されます。
ファイル参照ボックスの[参照]ボタンをクリックします。[アップロードするファイルの選択]ダイアログボックス(ファイルを開くダイアログ)が表示されます。アップロードするファイルを選択します。
ファイルを選択しました。
今回アップロードするファイルは下図のテキストファイルです。
HTML画面の[アップロード]リンクをクリックします。正常にファイルがアップロードされると、下図の"OK"ダイアログが表示されます。
サーバーのHTMLファイルが配置されたディレクトリに、ファイルがアップロードされています。
ファイルの内容もアップロードしたファイルと一致しています。
このページのキーワード
- JSを利用してファイルをアップロードする - HTMLHttpRequestを利用したファイルのアップロード
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用