В тонкой загрузке, как сделать S3 Bucket по-разному в зависимости от среды

Я использую Fine Uploader для загрузки файлов на S3.

Исходя из моего опыта, хороший загрузчик заставляет жестко кодировать имя сегмента s3 в самом java-скрипте, или это может быть моим недоразумением!. Моя проблема в том, что у меня разные ведра для каждой среды. Означает ли это, что я должен использовать отдельный Java-скрипт (как показано ниже) для каждой среды, такой как local, dev, test и т. д.? Есть ли вариант, в котором я могу передать имя корзины из конфигурации на стороне сервера?

Местный

$('#fine-uploader').fineUploaderS3({
    template: 'qq-template',
    autoUpload: false,
    debug: true,
    request: {
        endpoint: "http://s3.amazonaws.com/bucket_local",
        accessKey: "AKxxxxxxxxxxBIA",     
    },
)}

Dev

 $('#fine-uploader').fineUploaderS3({
            template: 'qq-template',
            autoUpload: false,
            debug: true,
            request: {
                endpoint: "http://s3.amazonaws.com/bucket_dev",
                accessKey: "AKxxxxxxxxxxBIA",     
            },
        )}

Тестовое задание

$('#fine-uploader').fineUploaderS3({
    template: 'qq-template',
    autoUpload: false,
    debug: true,
    request: {
        endpoint: "http://s3.amazonaws.com/bucket_test",
        accessKey: "AKxxxxxxxxxxBIA",     
    },
)}

2 ответа

Решение

Исходя из моего опыта, хороший загрузчик заставляет жестко кодировать имя корзины s3 в самом java-скрипте, или это может быть моим недоразумением!

Да, это определенно недоразумение.

Обычно вы бы указали свой контейнер в виде URL через request.endpoint вариант. Здесь можно указать значение по умолчанию, а затем переопределить его практически в любое время для всех последующих файлов или одного или нескольких конкретных файлов через setEndpoint API метод. Вы можете вызвать этот метод, например, из onSubmit обработчик обратного вызова, и даже делегировать на ваш сервер для ведра, возвращая Promise в вашем обработчике обратного вызова и разрешении Promise как только вы позвонили setEndpoint,

Fine Uploader пытается определить имя корзины из request.endpoint URL. Если это невозможно (например, если вы используете CDN в качестве конечной точки), вам нужно будет указать имя сегмента через objectProperties.bucket вариант. Это также может быть динамически обновлено, так как значение параметра может быть функцией, и вы можете даже вернуть Promise из этой функции, если вы хотите делегировать асинхронную задачу для определения имени сегмента (например, если вам нужно получить имя блока из конечной точки сервера с помощью вызова ajax). Fine Uploader S3 позвонит вашему bucket Функция, прежде чем он пытается загрузить каждый файл, передавая идентификатор файла вашей функции.

Я установил s3_url как скрытое значение в html, а значение установил на сервере на основе конфигурации среды.

request: {
   endpoint: $('#s3_url').val() 
}
Другие вопросы по тегам