是filepicker.io在s3上存储两次文件?

时间:2013-05-02 21:09:23

标签: javascript amazon-s3 filepicker.io

filepicker.pick()在S3(根目录)上存储文件。如果我稍后调用filepicker.store(),那么文件将被复制到新位置,所以最后我在两个不同的位置使用两个不同的文件名两次使用相同的文件。怎么避免这个?

我想分别选择两个文件,然后在处理我的表单时立即将它们上传到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 个答案:

答案 0 :(得分:2)

为了在使用filepicker.pick并从您的计算机上传时返回FPFile对象上的URL,我们必须将文件上传到S3。对于像Facebook这样的其他服务,我们不会将文件传输到S3,而只是给你一个直接解析回Facebook文件的URL。

如果需要,可以使用filepicker.pickAndStore自动解决此问题,也可以使用filepicker.remove()调用。

答案 1 :(得分: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')
        });

    });

});