Я ищу библиотеку / инфраструктуру AJAX HTML 5, чтобы пользователи могли загружать файлы непосредственно в Amazon S3. Цель состоит в том, чтобы не загружать вложения на веб-сервер (поскольку веб-сервер блокирует их при передаче в Amazon). Насколько я понимаю, это должно быть возможно с использованием XDomainRequest
, но я не могу понять, как.
Я запускаю ruby-on-rails и хотел назначить загруженному файлу временное имя (используя UUID), которое будет отправлено обратно на веб-сервер, чтобы впоследствии файл можно было переименовать и интегрировать с paperclip.
Есть идеи? JQuery может с этим справиться? Flash не вариант для этого проекта. Спасибо!
Edit:
Мне удалось заставить базовую почту работать, но у меня все еще есть проблемы. Я не совсем уверен, какие заголовки требуются или как закодировать необходимые параметры Amazon в запросе (могу ли я поместить их в заголовок запроса?). Вот мой прогресс на данный момент:
const XMLHTTPFactories = [
function () { return new XDomainRequest(); },
function () { return new XMLHttpRequest(); },
function () { return new ActiveXObject("Msxml2.XMLHTTP"); },
function () { return new ActiveXObject("Msxml3.XMLHTTP"); },
function () { return new ActiveXObject("Microsoft.XMLHTTP"); },
];
var xhr = null;
for (var i = 0; i < XMLHttpFactories.length; i++) {
try { xhr = XMLHttpFactories[i](); break; } catch (exception) { continue; }
}
$(this).change(function () {
for (var i = 0; i < this.files.length; i++) {
var file = this.files[i];
xhr.open(settings.method, settings.url, true);
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*")
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhr.setRequestHeader("X-File-Name", file.fileName);
xhr.setRequestHeader("X-File-Size", file.fileSize);
xhr.send(file);
}
Edit:
После дальнейших обновлений мне удалось получить следующую ошибку:
XMLHttpRequest не может загрузить
http://bucket.s3.amazonaws.com/.
Происхождение http://local.app есть
не разрешено
Access-Control-Allow-Origin.
Я загрузил файл crossdomain.xml
, который разрешает доступ из домена с подстановочными знаками (*). Не уверен, как продолжить ...
Edit:
После более подробного изучения я начинаю думать, что JavaScript POST может оказаться невозможным для S3. Нужно ли будет публиковать в экземпляре EC2 перед выполнением перевода? Я мог бы защитить микроэкземпляр, но я бы предпочел перейти прямо к S3, если это возможно! Спасибо!
Edit:
Я разместил вопрос на форумах Amazon и не получил ни одного отзыва. Для перекрестных ссылок другой пост можно найти здесь: https://forums.aws.amazon.com/message.jspa?messageID=206650#206650.