Filepicker.io хранит файлы на s3 дважды?

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

person Marcin    schedule 02.05.2013    source источник


Ответы (2)


Чтобы вернуть вам URL-адрес объекта FPFile при использовании filepicker.pick и загрузке с вашего компьютера, мы должны загрузить файл на S3. Для других служб, таких как Facebook, мы не передаем файл в S3, вместо этого просто даем вам URL-адрес, который разрешается непосредственно обратно в файл Facebook.

Если вы хотите, вы можете либо использовать filepicker.pickAndStore, который разрешает это автоматически, либо использовать вызов filepicker.remove().

person brettcvz    schedule 03.05.2013
comment
Это влияет на использование передачи S3 дважды для одного файла, не так ли? Однако как просто подготовить файл для сохранения (просто выбрать файлы на форме), а затем сохранить их сразу. Если я правильно понимаю, что нет способа управлять мусором, который остается на S3, когда пользователь уходит со страницы или возникает какая-либо другая проблема, верно? - person Marcin; 03.05.2013

Вы правы - если у вас настроен S3, вы получите 2 файла, если вы выберете pick(), а затем сохраните().

Файл, созданный pick(), будет находиться на корневом уровне вашей корзины S3.

Я не нашел способа избежать этого, поэтому я использовал pick(), store() и remove() - так как это асинхронные функции, вам нужно их вложить или (лучше) использовать управление потоком по вашему выбору.

Если вам не нужно ничего делать между pick() и store(), вы можете сделать pickAndStore(), если вам нужна информация из вызова pick() перед выполнением запроса store(), перейдите к примеру ниже:

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

    });

});
person ezmilhouse    schedule 27.03.2015