Xhr Upload поддержка по запросам кросс-доменов - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть прокси, который загружает огонь на сервер Amazon S3. Этот прокси создан с использованием NodeJS, а моя веб-страница размещена на сервере Tomcat. Поэтому, чтобы сделать Xhr-загрузку, мне пришлось использовать Nginx для решения междоменных проблем, так как оба сервера находятся на одной машине.

Но использование Nginx имеет много проблем, поэтому мой босс спросил, могу ли я сделать то же самое, используя междоменную политику. Я сделал это, но это то, что я не в состоянии сделать. Вот мой код:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true,       true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());

Это работает для междоменного запроса, достигающего сервера с файлом и возвращающего ответ, но когда я пытаюсь установить событие прогресса, например:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {};
xhr.upload.onprogress = function(){console.info('on progress');};
xhr.open('POST', self.basePath + '/upload' + file.name, true, null, null, null, true,       true);
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
xhr.setRequestHeader("Connection", "close");
xhr.sendAsBinary(file.getAsBinary());

Междоменный запрос не запускается (запрос использует метод «OPTIONS» вместо POST и никогда не достигает сервера). Но, как вы можете подумать, мне нужно событие прогресса, чтобы показать его пользователю. Кто-нибудь знает, что происходит ??

Ps: Все вышеприведенные коды отлично работают по запросу "тот же домен". Ps2: я пробовал xhr.onprogress, но он никогда не запускается (при кросс-запросах или запросах одного домена) PS3: я пробовал на FF4 + и Chrome 12 +

Большое спасибо. Тьяго

Ответы [ 2 ]

1 голос
/ 29 августа 2013

Я сталкивался с подобной проблемой раньше.

Решение : Добавить

<AllowedHeader>*</AllowedHeader>

в вашей конфигурации CORS на s3

1 голос
/ 16 декабря 2011
xhr.upload.addEventListener("progress", yourUpdateProgressFunction, false);
...