使用Dropzone.js使用Sails.js 0.10和Skipper上载多个文件

时间:2014-07-23 08:45:59

标签: file-upload sails.js dropzone.js skipper

我的sails应用中存在多个文件上传的问题。 我正在尝试使用Dropzone.js实现多个文件上传,我的后端是Sails v0.10.0-rc8。

现在当我通过dropzone上传一些文件时,我发现在多次上传的情况下,它会在请求中发送带有单独参数的文件。参数名称为'photo[0]', 'photo[1]', 'photo[2]',...。我在控制器中获取这样的文件:

req.file(file).upload(function (err, files) {

    // save the file

});

但是当提交的文件超过一个时,请求将被传递给控制器​​,然后从请求中解析并存储所有文件,因此我的控制器中只有一个文件。

有没有人遇到过这个问题?也许在船长体解析器中不支持多个文件上传和不同的请求参数?因为当我在一个属性('photo')中提交多个文件时,所有这些文件都会被处理并传递给控制器​​。

3 个答案:

答案 0 :(得分:7)

如果您异步循环遍历参数名称,这应该可以工作,例如:

async.map(paramNames, function(file, cb) {

    req.file(file).upload(function (err, files) {

        // save the file, and then:
        return cb(err, files);

    });

}, function doneUploading(err, files) {

       // If any errors occurred, show server error
       if (err) {return res.serverError(err);}
       // Otherwise list files that were uploaded
       return res.json(files);

});

我能够成功地测试它。

答案 1 :(得分:1)

这对我来说似乎没问题:

    Dropzone.options.fotagDropzone = {
    init: function() {

    this.on("success", function(file, responseText) {
    // Handle the responseText here. For example, add the text to the preview element:
    console.log(responseText.files[0]);
    file.previewTemplate.appendChild(document.createTextNode(responseText.files[0].fd));
    });

    },
    paramName: "file", // The name that will be used to transfer the file
    maxFilesize: 10, // MB
    uploadMultiple: false,
    addRemoveLinks: true,
    parallelUploads: true,
    dictDefaultMessage: 'Drag files here <br />or<br /><button class="dzUploadBtn" type="button">click here to upload</button>',
    acceptedMimeTypes: '.jpg'
    };

基本上,它不会将所有文件一起发送,但您仍然可以将多个文件放入dropzone。后端是使用skipper的标准上传。

答案 2 :(得分:0)

使用Dropzone和Sails.js,您必须:

  • 在dropzone配置中添加文件名的定义:

Dropzone.options.myDropzone = { paramName:&#34; fileName&#34; }

  • 使用此命令取回上传的文件:

req.file(&#39; fileName&#39;)。upload(function(err,uploadedFiles){

});

uploadedFiles包含文件