如何让 JQuery 文件上传插件对一次上传的所有文件只调用一次后端?

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

我正在使用 sails.js 建立网站。我有一个名为 timeline 的模型。它有一些文本字段以及一个名为 pictures 的集合。每个 timeline 可以有多个 pictures。我想在用户单击 save 时立即更新所有这些字段。我正在使用 JQuery 文件上传器来帮助上传多文件。

问题是,JQuery 文件上传会为每张上传的图片调用一次我的后端文件上传服务。我只需要更新其他文本字段一次,并且需要在创建 pictures 记录之前更新它们,因为每张图片都需要有一个与之关联的 timeline ID。

异步任务可行吗?我不这么认为,因为 JQuery 文件上传器多次调用我的后端,我认为我无法使用异步并行推送任务和更新其他字段。如果它是一个单一的上传调用,我就可以做到。

我正在考虑保留两个提交按钮 - 一个用于文本字段,一个用于文件上传,但我真的不喜欢这种方式。如果有人指导我就太好了。

如果我对你的问题理解正确,我认为你需要检查第 112 行附近的文件 jquery.fileupload.js 尝试更改 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({ 文件:上传的文件, 文本参数:req.params.all() }); });

                    });



                } 
            }

        });

SingleFileUploads 设置为 false 对 JQuery 文件上传器没有太大帮助,因为似乎存在上面讨论的错误。所以我把那个东西设置回 true。

我将输入分为两种不同的形式 - 一种用于文本字段输入,另一种用于文件(通过 JQuery 文件上传器)。对于文本字段表单,我保留了一个用户可以单击的可见按钮。对于另一个,我隐藏了按钮。因此,一旦用户单击可见按钮,我只提交文本输入并在后端(这是使用 AJAX 调用完成的)和 [=17= 的 success 字段中创建数据库记录] 调用,如果文件数大于 0,我 .click() 隐藏按钮。