【发布时间】:2019-01-26 09:01:06
【问题描述】:
我正在尝试使用 blueimp jquery 文件上传库执行多个文件上传。链接到图书馆 - https://github.com/blueimp/jQuery-File-Upload
文件正在上传。但一次只能上传一个文件。多个文件也在上传,但单个文件只上传一次。我不确定错误是什么。
PHP
<?php
// A list of permitted file extensions
$allowed = array('png', 'jpg', 'gif','zip', 'html','php', 'py', 'jpeg', 'txt');
for ($i=0; $i < count($_FILES); $i++) {
if(isset($_FILES['files']) && $_FILES['files'][$i]['error'] == 0){
$extension = pathinfo($_FILES['files'][$i]['name'], PATHINFO_EXTENSION);
if(!in_array(strtolower($extension), $allowed)){
echo '{"status":"error 1", "extension": "'.$extension.'"}';
exit;
}
if(move_uploaded_file($_FILES['files'][$i]['tmp_name'], __DIR__.'/upl/'.$_FILES['files'][$i]['name'])){
echo '{"status": "success"}';
}
}
else {
echo '{"status":"error"}';
exit;
}
}
?>
HTML
<div class="message">
<h1>Files to be uploaded: </h1>
</div>
<div class="result">
</div>
<input id="fileupload" type="file" name="files[]" multiple>
<br><br>
<input type="submit" name="submit" id="upload">
JS
$(function () {
$('#fileupload').fileupload({
dataType: 'json',
url: 'act',
add: function(e,data) {
console.log("added for uploading");
console.log(data.files[0].name);
if( $(".message").is(":hidden") ) {
$(".message").show();
}
$(".message").append("<p>"+ data.files[0].name + "</p>");
$("#upload").click(function(){
data.submit();
})
},
start: function (e) {
console.log('start');
},
done: function (e, data) {
console.log("success in uploading data");
console.log(data);
console.log(data.files[0].name);
// $.each(data.files, function (index, file) {
// $('<p/>').text("file name: " + file.name).appendTo($(".message"));
// });
$(".message").hide();
$(".result").append("Uploading files");
},
fail: function (e, data) {
console.log(data);
console.log("failed to perform");
$.each(data.messages, function (index, error) {
$('<p style="color: red;">Upload file error: ' + error + '<i class="elusive-remove" style="padding-left:10px;"/></p>')
.appendTo('.message');
});
}
});
});
正在上传多个文件。但是一次上传一个文件。我的意思是如果我提交3个文件,第一个文件将首先发送上传,然后发送第二个文件,最后发送第三个文件。而不是将所有三个文件作为数组发送。每次将发送一个文件。即总共将发送 3 个数组。并且任何人都可以帮助执行分块。谢谢!!
更新 将数据附加到 data.files 时存在问题,而不是将文件附加到数组,而是每次都创建一个新对象。但我不知道为什么会这样做!
【问题讨论】:
-
为什么
exit;很多? -
是为了防止不同情况的退出
-
@KhoaTruongDinh 代码有问题吗??
-
我没有对你投反对票。我还在检查你的代码行。
-
谢谢@KhoaTruongDinh 我发现了一个小问题。每次添加文件时,都会创建一个新数组并添加文件。我登录了
data.files。如果我选择多个文件,则每次只在数组中创建一个文件。 .add 事件没有附加到数组我猜它创建一个新数组!
标签: php jquery file-upload blueimp