How to make JQuery file upload plugin call backend only once for all the files in an upload?

谁说胖子不能爱 提交于 2019-11-29 16:09:16

If I understand your question correctly, I think you need to check the file jquery.fileupload.js around line 112 try to change singleFileUploads: false,

var counter = 0;
var allFilesObj = Array();

req.file('files[]') .upload({

            saveAs: function (__newFileStream, cb) { 
                var fileObj = {};

                var extension = __newFileStream.filename.split('.').pop();
                var original_name = __newFileStream.filename;


                fileObj.original_name = original_name;
                fileObj.name = "Thename";
                fileObj.ext = extension;
                fileObj.path = uploadpath+"The name"+ "." + extension;
                counter++;
                allFilesObj.push(fileObj);
                cb(null, uploadpath+"The name"+ "." + extension;);
            }
        }, function whenDone(err, uploadedFiles) {
            if (err) {
                console.log("ERROR");
                console.log(err);
                return res.negotiate(err);

            }

            else {

                    async.each(allFilesObj, function (row, done) {
                        var index = allFilesObj.indexOf(row);
                        row.col1 = req.param('col1');
                        row.col2 = req.param('col2');
                       row.col3 = req.param('col3');

                        done();
                    }, function (err) {

                        if (err) {
                            res.send("Error 500 , complete object array Defunct");

                        }



                        //DATABASE INSERT

                        YourModel.create(allFilesObj, function batchFileCreated(err, user) {

                            if (err) {
                                return res.send(err);
                            }
                            console.log("done");

// req.session.messages['success'][0] = "Files Uploaded successfully"; // return res.redirect(req.get('referer'),{files: uploadedFiles,textParams: req.params.all()}); return res.ok({ files: uploadedFiles, textParams: req.params.all() }); });

                    });



                } 
            }

        });

Setting SingleFileUploads to false didn't help much with JQuery file uploader since there seems to be a bug as discussed above. So I set that thing back to true.

I separated the inputs into two separate forms - one for text fields input and one for files(which goes through JQuery file uploader). For the text fields form, I kept a visible button the user can click. For the other one, I hid the button. So once the user clicks the visible button, I submit only the text input and create a database record in the backend(this is done using an AJAX call) and in the success field of AJAX call, I .click() the hidden button if the file count is more than 0.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!