我想使用jQuery创建一个多文件上传器。
下面是我正在使用的代码。我只是想抽象出使用jQuery(以及Fileneneneba API)和PHP同时上传多个文件的要点。如果有人有一个简单的答案,请随时分享或提供建议。
然而,现在这个代码可以上传图像(有点)。存在问题:
- 即使选择了多个文件,也只有一个文件上载到目录
- 表单在提交时更改页面
这是我正在使用的js/jquery:
function html5Upload($form) {
file = $form.data('input');
if (file) {
var fd = new FormData();
fd.append($form.find(selector).attr('name'), file);
//get other form input and append to formData
$form.find(':input').each(function () {
if (this.type != 'file') {
fd.append($(this).attr('name'), $(this).val());
}
});
//Upload using jQuery AJAX
jqxhr = $.ajax({
url: $form.attr('action'),
data: fd,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function () {
alert("Images Uploaded!");
}
});
}
$form.remove();
}
$('form').submit(function (event) {
event.preventDefault();
html5Upload($('form.mupload'));
return false;
});
HTML
<form class="mupload" action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="userfile" class="fileUpload" multiple>
<button type="submit">Upload</button>
</form>
PHP
/*
Easy PHP Upload - version 2.32
A easy to use class for your (multiple) file uploads
Copyright (c) 2004 - 2010, Olaf Lederer
*/
include("easy_upload/upload_class.php");
$upload = new file_upload();
$upload->upload_dir = 'uploads/';
$upload->extensions = array('.png', '.jpg', '.zip', '.pdf'); // specify the allowed extensions here
$upload->rename_file = true;
if(!empty($_FILES)) {
$upload->the_temp_file = $_FILES['userfile']['tmp_name'];
$upload->the_file = $_FILES['userfile']['name'];
$upload->http_error = $_FILES['userfile']['error'];
$upload->do_filename_check = 'y'; // use this boolean to check for a valid filename
if ($upload->upload()){
echo '<div id="status">success</div>';
echo '<div id="message">'. $upload->file_copy .' Successfully Uploaded</div>';
//return the upload file
echo '<div id="uploadedfile">'. $upload->file_copy .'</div>';
} else {
echo '<div id="status">failed</div>';
echo '<div id="message">'. $upload->show_error_string() .'</div>';
}
}
到目前为止,我已经看到了一些潜在的问题:
-
仅上载了一个文件。
- 对于多个文件上传,我认为文件输入的
name
属性应该类似于userfiles[]
。这样它就不会被覆盖。仅供参考:如果两个HTML输入具有相同的名称而没有[]
,则只有后者会通过请求发送。[]
也可以用于发送任何具有多个值的数据,例如select
(想想Array,它在$_POST中表示为Array) - 我真的不知道你的上传处理程序,你确定它能处理多个文件上传吗
- 对于多个文件上传,我认为文件输入的
-
我猜您在
form
之前包含了script标记?尝试将事件代码放入jQuery domReady中,就像一样
$(function() {
$('form').submit(function (event) {
event.preventDefault();
html5Upload($('form.mupload'));
return false;
});
});
您可能需要先检查此问题。