jQuery を使用してファイルを非同期にアップロードしたいと思います。
$(document).ready(function () {
$("#uploadbutton").click(function () {
var filename = $("#file").val();
$.ajax({
type: "POST",
url: "addFile.do",
enctype: 'multipart/form-data',
data: {
file: filename
},
success: function () {
alert("Data Uploaded: ");
}
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<span>File</span>
<input type="file" id="file" name="file" size="10"/>
<input id="uploadbutton" type="button" value="Upload"/>
ファイルがアップロードされる代わりに、ファイル名のみが取得されます。この問題を解決するにはどうすればよいですか?
ベストアンサー1
とHTML5AjaxとjQueryを使ってファイルのアップロードができます。それだけでなく、ファイルの検証(名前、サイズ、MIMEタイプ)を行ったり、HTML5の進行状況タグ(またはdiv)を使って進行状況イベントを処理したりできます。最近、ファイルアップローダーを作成する必要がありましたが、閃光iframe やプラグインも使用せず、調査した後、解決策を見つけました。
HTML:
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
<progress></progress>
まず、必要に応じて検証を行うことができます。たとえば、.on('change')
次のファイルの場合:
$(':file').on('change', function () {
var file = this.files[0];
if (file.size > 1024) {
alert('max upload size is 1k');
}
// Also see .name, .type
});
$.ajax()
ボタンをクリックして送信します。
$(':button').on('click', function () {
$.ajax({
// Your server script to process the upload
url: 'upload.php',
type: 'POST',
// Form data
data: new FormData($('form')[0]),
// Tell jQuery not to process data or worry about content-type
// You *must* include these options!
cache: false,
contentType: false,
processData: false,
// Custom XMLHttpRequest
xhr: function () {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
// For handling the progress of the upload
myXhr.upload.addEventListener('progress', function (e) {
if (e.lengthComputable) {
$('progress').attr({
value: e.loaded,
max: e.total,
});
}
}, false);
}
return myXhr;
}
});
});
ご覧のとおり、HTML5(と少しの調査)を使えば、ファイルのアップロードは可能になるだけでなく、非常に簡単になります。グーグルクローム例の HTML5 コンポーネントの一部はすべてのブラウザで使用できるわけではないためです。