jQuery文件上传插件,多个文件和表单数据

时间:2017-11-11 13:03:13

标签: javascript php jquery forms jquery-file-upload

我在实施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"}]}

2 个答案:

答案 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_filesizephp.ini的内容 只有maxChunkSize将大文件拆分为多个请求。

示例:

$('#applicationform').fileupload({
    maxChunkSize: 10*1024*1024, // 10 MB <--- 
    ...
    });