我有一個代理上傳一個火災到亞馬遜S3服務器。此代理使用NodeJS完成,我的網頁託管在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());
的跨域請求未被觸發(請求使用「OPTIONS」方法而不是POST,並且它永遠不會到達服務器)。但是,正如您可能認爲的那樣,我需要進度事件才能將其展示給用戶。有誰知道發生了什麼?
Ps:上述所有代碼完全適用於「同一域名」請求。 Ps2:我試過xhr.onprogress,但它永遠不會被解僱(在交叉或相同的域請求) Ps3:我試過FF4 +和Chrome 12+
謝謝你很多。 Thiago