Asynchronous 如何使JQuery文件上传插件对上传中的所有文件只进行一次后端调用?

Asynchronous 如何使JQuery文件上传插件对上传中的所有文件只进行一次后端调用?,asynchronous,sails.js,jquery-file-upload,asyncfileupload,jquery-fileupload-rails,Asynchronous,Sails.js,Jquery File Upload,Asyncfileupload,Jquery Fileupload Rails,我正在使用sails.js建立一个网站。我有一个名为timeline的模型。它有一些文本字段以及一个名为pictures的集合。每个时间轴可以有多张图片。我想在用户单击“保存”时立即更新所有这些字段。我使用JQuery文件上传器来帮助多文件上传 问题是,JQuery file upload为每个上传的图片调用一次我的后端文件上传服务。我只需要更新其他文本字段一次,并且在创建图片记录之前需要更新它们,因为每个图片都需要与它们关联的时间线ID 异步任务是要走的路吗?我不这么认为,因为JQuery文件

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

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

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


我想保留两个提交按钮——一个用于文本字段,另一个用于文件上传,但我并不喜欢这种方式。如果有人能在这方面指导我,那就太好了。

如果我正确理解你的问题,我想你需要检查第112行附近的jquery.fileupload.js文件,尝试更改singleFileUploads:false

var counter = 0;
var allFilesObj = Array();
请求文件'files[]' .上传{

            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");
//请求会话消息['success'][0]=成功上载的文件; //返回res.redirectreq.get'referer',{files:uploadedFiles,textParams:req.params.all}; 返回res.ok{ 文件:上传的文件, textParams:req.params.all }; };

                    });



                } 
            }

        });
将SingleFileUploads设置为false对JQuery文件上传程序没有多大帮助,因为上面讨论的似乎有一个bug。所以我把事情变回了现实


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

谢谢@mo.dhouibi。我正在尝试你的解决方案。JQuery文件上传需要我们在上传后向其发送某些参数,如大小、url、缩略图url、从后端文件上传服务删除url。因此,如果我现在将singleFileUploads设置为false,那么这些参数需要更改为数组?很抱歉,我不能100%确定您是如何执行此操作的,但假设您希望上载一批文件并在数据库中插入行,这可能无法回答您的问题,但可能会帮助您:我面临另一个问题。如果将SingleFileUploads设置为false,则一次选择的多个文件将在一个请求中上载,但如果我通过单独的“添加文件”单击添加多个文件,它仍会一次发送一个文件,而不是一次选择多个文件。我检查了是否需要为此设置任何其他标志,但似乎没有。有什么想法?添加多个文件加上单独的添加文件点击,这我假设它是一个带有jQuery上传文件的bug,在我的经验中,单独添加点击只考虑最后一批…也许有人可以证实这一点,如果是这样的话,你需要在前端找到一种方法来阻止用户点击两次。