6

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

});

ただし、送信されたファイルが複数ある場合、すべてのファイルが解析されてリクエストから保存される前に、リクエストがコントローラに渡されるため、コントローラにファイルが 1 つしか取得されません。

誰もこの問題を経験しましたか? スキッパーボディパーサーで異なるリクエストパラメーターを使用した複数のファイルのアップロードがサポートされていない可能性がありますか? 1 つの属性 (「写真」) 内で複数のファイルを送信すると、それらすべてが処理されてコントローラーに渡されるためです。

4

3 に答える 3

8

パラメータ名を非同期的にループする場合、これは機能するはずです。

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);

});

これをうまくテストできました。

于 2014-07-26T21:45:40.833 に答える
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'
    };

基本的に、ファイルをまとめて送信するわけではありませんが、複数のファイルをドロップゾーンにドロップすることはできます。バックエンドは、スキッパーを使用した標準のアップロードです。

于 2015-05-30T12:43:59.783 に答える