В тонкой загрузке, как сделать 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()
}