2011-11-08 6 views
0

私はAmazon S3サーバに火をアップロードするプロキシを持っています。このプロキシはNodeJSを使用して作成され、私のWebページはTomcatサーバー上でホストされます。だから、Xhrをアップロードするには、両方のサーバが同じマシン上にあるので、クロスドメインの問題を解決するためにNginxを使用しなければなりませんでした。Xhrはクロスドメインリクエストのアップロードをサポートします

しかし、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()); 

クロスドメインリクエストは起動されません(POSTではなく「OPTIONS」メソッドが使用され、サーバーに到達しません)。しかし、あなたが思うかもしれませんが、私はそれをユーザーに示すために進捗イベントが必要です。誰が何が起こっているのか知っていますか?

Ps:上記のコードはすべて、「同じドメイン」要求で完全に機能します。 PS2が:私はxhr.onprogressを試みたが、それは PS3の(クロスまたは同じドメインの要求に)発射されることはありません:私はFF4 +とChrome上12+

おかげLOTを試してみました。 チアゴ

答えて

1

私は前に同様の問題に直面しました。

ソリューション:S3

であなたのCORS設定で

<AllowedHeader>*</AllowedHeader> 

を追加します。

1
xhr.upload.addEventListener("progress", yourUpdateProgressFunction, false); 
関連する問題