2013-05-02 31 views
1

filepicker.pick()存儲S3(根目錄)上的文件。如果我稍後調用filepicker.store(),那麼文件將被複制到新的位置,所以最後我在兩個不同位置使用兩個不同文件名的文件有兩次相同的文件。如何避免這種情況?是filepicker.io在s3上存儲兩次文件?

我想單獨選擇兩個文件,然後在處理表單時立即將它們上傳到S3。

filepicker.pick({container: "modal"}, function(fpfile) { 
    alert("picked"); //file is stored on S3 
    filepicker.store(fpfile, { location: "S3", path: "tmp/"}); //will copy to "tmp/" location 
    }); 

回答

2

爲了使用filepicker.pick和上傳時,從您的計算機給你回FPFile對象上的網址,我們必須將文件上傳到S3。對於Facebook等其他服務,我們不會將文件傳輸到S3,而只是給您一個直接解析回Facebook文件的URL。

如果您願意,您可以使用filepicker.pickAndStore(自動解決此問題)或使用filepicker.remove()調用。

+1

這會影響S3爲單個文件傳輸兩次使用情況是不是?但是,如何準備商店文件(只需在表單上選擇文件),然後立即存儲它們。如果我正確地做到這一點,就沒有辦法管理在S3上留下的垃圾,用戶離開頁面或發生任何其他問題,對吧? – Marcin 2013-05-03 15:23:40

1

你說得對 - 如果你配置了S3,那麼如果你選擇了(),然後再存儲(),那麼你最終將得到2個文件。

pick()創建的文件將位於S3存儲桶的根級別。

我沒有找到避免這種情況的方法,因此我使用pick(),store()和remove()來運行 - 因爲這些是嵌套它們所需的異步函數,或者(更好地)使用流控制你的選擇。如果你不需要在pick()和store()之間做任何事情,那麼你可以做pickAndStore(),如果你在執行store()請求之前需要pick()調用的信息,示例如下:

var file; 

// authenticate 
filepicker.setKey('YOUR_API_KEY'); 

// pick 
filepicker.pick({ 
    container : 'modal', 
    debug  : false, 
    extensions : ['.png', '.jpg', '.jpeg', '.gif'], 
    folders : false, 
    language : 'en', 
    maxFiles : 1, 
    maxSize : '2560*1600', 
    multiple : false, 
    openTo  : 'COMPUTER', 
    services : [ 
     'BOX', 
     'COMPUTER' 
    ] 
}, function(res) { 

    // save blob, to remove it later 
    file = res; 

    // store 
    filepicker.store(file, { 
     access : 'public', 
     container : 'YOUR_BUCKET', 
     location : 'S3', 
     path  : 'SOME_FOLDER/ANOTHER_FOLDER/FILENAME.png' 
    }, function(res) { 

     // remove 
     filepicker.remove(file, function() { 
      console.log('ok') 
     }); 

    }); 

}); 
相關問題