我在实施jQuery文件上传插件(https://github.com/blueimp/jQuery-File-Upload/wiki/Options)方面遇到了问题。
我的表单有一个文件字段设置为多个和一些常规输入字段。我使用PHP来处理服务器端的表单。
当我选择上传并提交表单的几个大文件时,似乎会出现问题,在这种情况下,$ _POST和$ _FILES数组为空。
我还没有确切知道这种情况何时发生 - 起初我虽然选择大文件时发生这种情况,但文件总大小超过了我的最大文件大小上传限制,但这并不是&# 39;似乎是这样。
似乎问题出在客户端,因为在这些情况下似乎根本没有表单数据发送到服务器。
有没有人遇到这个问题并且有解决方案吗?
更新
问题似乎是,如果提交大小大于允许的最大上传大小,PHP将删除$ _POST和$ _FILES中的所有数据。我的理解是,这个插件可以发出多个请求来上传多个文件以避免这个问题,但无论我使用什么设置,我都无法使其工作。
所以,让我试着更好地解释一下我想要实现的目标。用户可以在表单中输入信息,也可以选择附加任意数量的文件。每个文件的文件大小不得大于允许的最大上载限制,但用户可能会选择总文件大小大于最大值的多个文件。在这种情况下,我希望插件向服务器发出多个请求,确保每个请求都低于大小限制。但我无法让这个工作。只有一个请求。
这是我的代码的当前版本
$('#applicationform').fileupload({
autoUpload: false,
singleFileUploads: false,
//limitMultiFileUploads: 3,
//sequentialUploads: true,
//limitMultiFileUploads: 3,
//limitMultiFileUploadSize: 1000000,
dataType: 'json',
progress: function(e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
},
add: function (e, data) {
$("#applicationform-submit").off('click').on('click', function (e) {
e.preventDefault();
data.formData = $("#applicationform").serializeArray();
data.submit();
console.log("submit", data.files);
});
});
服务器使用插件提供的php代码将文件保存到服务器,每个请求返回一个JSON数组,其中包含用户上传的文件。例如:
{"files":[{"name":"Screen Shot 2017-07-24 at 20.28.48 (3).png","size":1289712,"type":"image\/png","url":"[snip]","thumbnailUrl":"[snip]","deleteUrl":"[snip]","deleteType":"DELETE"}]}
答案 0 :(得分:0)
如果您不共享任何代码,很难让您的问题得到解决。但是这段代码似乎对我自己很好。
也许这段代码可以帮到你:
var yourFilesList = [],
yourParameters = [],
elem = $("yourform");
file_upload = elem.fileupload({
formData:{extra:1},
autoUpload: false,
fileInput: $("input:file"),
}).on("uploadadd", function(e, data) {
yourFilesList.push(data.files[0]);
yourParameters.push(e.delegatedEvent.target.name);
});
$("sendbutton").click(function(e) {
e.preventDefault();
file_upload.fileupload('send', {files:yourFilesList, paramName: yourParameters});
})
答案 1 :(得分:0)
您应该在maxChunkSize
中将post_max_size
设置为低于upload_max_filesize
和php.ini
的内容
只有maxChunkSize
将大文件拆分为多个请求。
示例:
$('#applicationform').fileupload({
maxChunkSize: 10*1024*1024, // 10 MB <---
...
});