使用Laravel和NOT autoupload的jQuery FileUpload

时间:2015-03-16 21:38:25

标签: jquery laravel file-upload

我关闭了AutoLoad的jQuery FileUpload遇到了很多问题。我需要在一个请求中提交所有内容 - 而不是多个。我有3天的时间和很多研究。我只是觉得我错过了一件事。这就是我得到的:

jQuery的:

$(function(){

var ul = $('#upload ul');

// Initialize the jQuery File Upload plugin
$('#entry_form_doc').fileupload({
    type: 'POST',
    url: 'leadresources/submitDoc',
    limitMultiFileUploads: 5,
    autoUpload: false,
    dropZone: $('#drop'),
    add: function (e, data) {

//fired by a click of a button.
        $("#submit_doc").unbind('click').on('click', function(){
            data.formData = {files: data.originalFiles};
            data.submit();
        });
    },
    fail:function(e, data){
        // Something has gone wrong!
        data.context.addClass('error');
    }

});

});

当我将print_r()打印到Log:

时,这就是Laravel得到的
 [2015-03-16 14:27:27] production.INFO: Array
(
    [lb_id] => 
    [lb_doc_title] => asdf
    [lb_docs_summary] => 
    [file] => Array
        (
            [0] => Symfony\Component\HttpFoundation\File\UploadedFile Object
                (
                    [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                    [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => photo 2.JPG
                    [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
                    [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 498589
                    [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                    [pathName:SplFileInfo:private] => C:\xampp\tmp\php31F9.tmp
                    [fileName:SplFileInfo:private] => php31F9.tmp
                )
        )
)
 [] []
    )
     [] []

现在,它只返回第一个对象而没有别的。我想这是有道理的,因为data.submit在第一个图像上被触发然后解除绑定。

很长一段时间,我收到多个提交,但我只想用fileListArray提交一次 - 而不是单个文件。我试图创建一个文件列表数组,但Laravel记录了一个[object FileList],就是这样。

所以有没有其他人能够在没有autoLoad和一个请求的情况下解决这个问题 - 而不是多个。我已经关注了documentation谈论singleFileUploads但仍然......没有用。

只是好奇是否还有其他人在使用此功能。这是一个很棒的插件 - 真的很难搞清楚。

修改

我还应该说我之所以要关闭自动加载是因为我需要提交3个表单字段才能首先返回ID,这样我才能将ID附加到这些文档中。

1 个答案:

答案 0 :(得分:0)

这真的不是一个答案(所以我不会标记它),但我确实找到了另一个插件,但是不那么喜欢。我最后只使用了Dropzone。它更容易使用,并且具有我正在寻找的更多功能。

修改 有人问我是怎么用Dropzone做的。以下是我的表现方式:

$("#entryDoc").dropzone({ 
    url: "submitDoc",
    uploadMultiple: true,
    maxFiles: 5,
    parallelUploads: 5,
    autoProcessQueue:false,
    addRemoveLinks: true,
    thumbnailWidth: 100,
    thumbnailHeight: 100,
    paramName: 'files',
    dictRemoveFile: 'X',
    dictCancelUpload: 'Cancel',
    dictFallbackMessage: 'Your browser does not support dropzone. Please update your browser',
    dictInvalidFileType: 'File type not accepted. It has been removed from the queue.',
    dictFileTooBig: 'File is too big. It has been removed from the queue.',
    maxfilesexceeded: 'Only 5 files can be uploaded.',
    dictResponseError: 'Could not upload your files. Please try again or reach out to the developer.',
    fallback: function(){
        $('#entryDoc').html('Please update your browser.');
    },
    init: function(){
        var myDropZone = this;

        myDropZone.on("sendingmultiple", function (files, xhr, formData) {     //this form data gets sent over with the files.
            formData.append("action", $('#action').val());
            formData.append("lb_type_code", 'files');
            formData.append("lb_id", $('#lb_id').val());
        });

        $("#submit_doc").click(function () {
            var check = formValidation($('#files_container'));

            if(!check){
                $.jqDialog.alert("You are missing some required fields.");
                return false;
            }

            myDropZone.processQueue();
        });
    }, 
    success: function(){
        //what you want it to do after it successfully uploaded
    }, 
    error: function(file, errorMessage){
        //error here
    }
});