Я пишу приложение, в котором я хочу, чтобы клиент мог загружать в Amazon S3 прямо из браузера. Я могу сделать эту работу просто отлично. Но когда возникают ошибки, я хочу обрабатывать их более изящно, чем разбрызгивать XML-документ на экране клиента.
У меня есть схема, которая, я думаю, будет работать, но она не работает. Вот что я пытаюсь:
- Создайте форму для загрузки и сохраните форму на самом S3 в том же домене, что и атрибут «action» формы.
- Перенаправить клиента на эту форму. Теперь их браузер сидит на .s3.amazonaws.com/something" rel="nofollow noreferrer">https://.s3.amazonaws.com/something.
- Страница содержит скрытый фрейм. Форма устанавливает свою цель на iframe.
- Обработчик события load просматривает содержимое iframe и воздействует на него.
Итак, как-то так:
<iframe id="foo" name="foo" style="display: none" />
<form target="foo" action="https://<bucket>.s3.amazonaws.com/">
<input type="hidden" name="..." value="..." />
<input type="file" name="file" />
</form>
с этим javascript (используя jquery):
function handler() {
var message = $("#foo").contents().find('message').text();
alert(message);
}
$("#foo").load(handler);
Используя firebug, я вижу, что iframe содержит XML-документ, который содержит узел «message». Однако .find('message')
всегда не может найти что-либо в XML-документе.
Обратите внимание, что действие формы имеет тот же домен, порт и схему, что и сам документ. Итак, я не думаю, что я должен идти вразрез с политикой того же происхождения. Правильно? Но это терпит неудачу каждый раз. Это использует браузеры Firefox и Google Chrome.
Спасибо за любой совет!