1

Filepicker.ioをアップローダーとして使用しようとしていますが、ペイロード内の各ファイルに対してonSuccessイベントを発生させるために、.pickMultipleメソッドと.storeメソッドの組み合わせを使用しています。そのようです:

    filepicker.pickMultiple(function(fpfiles){

        for(var i = 0; i < fpfiles.length; i++){

            //Clean the filename

            //Check duplicate

            //Store the file on S3
            filepicker.store(
               fpfiles[i].url,
               {location: 'S3', path: 'filepicker/' + fpfiles[i].filename},
               function(my_uploaded_file){
                  //Do some other cool stuff ...
               }
            );
        }               
    });

(これは、ペイロード全体が送信を完了した後にのみonSuccessイベントを発生させる.pickAndStoreメソッドを使用するのとは対照的です)

私がこれで抱えている問題は、.pickMultipleメソッドが「自動的に」S3バケットのルートにファイルのコピーを保存しているように見えることです。そのため、同じファイルのコピーが2つ作成されます。

例えば:

my_file.pngをバケット内のIMAGESというフォルダーにアップロードすると、http://s3.amazonaws.com/my_bucket/IMAGES/my_file.pngの結果が得られるはずです

これ起こっていますが、私も取得しています: http ://s3.amazonaws.com/my_bucket/UNIQUE_ID_my_file.png

.pickMultipleがファイルをS3バケットに自動的に追加しないようにする方法を知っている人はいますか?

助けてくれてありがとう。

4

1 に答える 1

1

この同じ問題に遭遇する可能性のある他の人にとって、.pickMultiple()—> .store()メソッドは行き止まりです。ペイロード内の各ファイルに対してonSuccessイベントを発生させる(唯一の)方法は、バニラonChangeイベントを使用し<input type="file" />て要素のFILES配列を取得し、FILESをループして、配列内の各ファイルに対して.store()を呼び出すことです。 。

例:

$('#BTN_upload').change(function(){

    var files = $(this)[0].files;

    //So you can see what should be uploading
    console.log(JSON.stringify(files));

    //Loop the files array to store each file on S3
    for(var i = 0; i < files.length; i++){

        //All good. Now execute the .store call
        filepicker.store(

            //The file to upload
            files[i],

            //The file options
            //(I'm storing the files in a specific folder within my S3 bucket called 'my_folder')
            //This is also where you'll rename your file to whatever you'd like
            {path: 'my_folder/' + files[i].name},

            //OnSuccess
            function(FPFile){
                console.log("Store successful: ", JSON.stringify(FPFile));
                //Now possibly call .remove() to remove the 'temp' file from FP.io
            },

            //OnError
            function(FPError){
                console.log(FPError.toString());
            },

            //OnProgress
            function(progress){
                console.log("Loading: " + progress + "%");
            }
       );

    }

});
filepicker.setKey('MY_FP.IO_KEY');

そしてHTML:

<input id="BTN_upload" type="file" />

この例は完成品ではありません。それでも、独自のユーザーフィードバック(進行状況バーのあるキュー表示など)、重複チェック、名前変更などをロールする必要があります。しかし、それはすべて非常に単純なことです。

注:これは、ローカルからS3へのアップロード専用です。FP.ioが利用している他のソースを統合する方法がわかりません。多分あなたはしますか?

于 2013-03-29T02:17:04.643 に答える