0

次のコードを使用して、Microsoft Graph APIを使用してOneDriveに大きなファイル(62MB未満)をアップロードしています。Microsoft Graph APIへのXMLHttpRequestからIE 11への打ち切り

let req = new XMLHttpRequest(); 
req.open("PUT", url, true); 
req.setRequestHeader("Authorization", "Bearer " + this.authProvider.tokens.graph); 
req.setRequestHeader("Content-Length", file.size.toString()); 
req.setRequestHeader("Content-Range", "bytes 0-" + (file.size - 1).toString() + "/" + file.size.toString()); 
req.upload.onprogress = (e) => { 
    let progress = Math.floor(e.loaded/e.total * 100); 
    console.log(progress); 
}; 
req.upload.onerror = (e: any) => { 
    console.log("error"); 
}; 
req.onload = (e) => { 
    console.log("done"); 
}; 
req.send(buffer); 

これはクロム(現在までの最新版)から罰金を通過しているが、セッションを作成した後、アップロードはcreate session要求から返されたURLに失敗しています。 IE 11のコンソールでエラーSCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.が表示され、ネットワークタブで要求ステータスがabortedで、イニシエータがCORS Preflightリクエストであることがわかります。他のテストによると私はエラーがreq.open("PUT", url, true);行に由来すると思う。実際

-Update-

そのをChromeでうまく通じ取得します実際に失敗して返されたURLへのプリフライトCORS(OPTIONS)要求。

答えて

1

問題は、Content-Lengthヘッダを設定していることかもしれません。このヘッダを明示的にここに設定すべきではありません(とにかく、ファイル全体の長さではなく、現在の要求の長さだけを意図しています)。

これは任意ですが、私は何が起こっているかについての理論を持っていますが、今はテストすることができません。私の理論では、サーバーはContent-Lengthを許可ヘッダーとして明示的に宣言していないため、IEはCORSプリフライトに失敗しています(常に許可されている既定のヘッダーのセットに含まれているため)。 IEはおそらく、送信しようとしているヘッダーとCORSプリフライトが許可リストに返された内容とを明示的にチェックしています。

Content-Lengthヘッダーの設定を中止して、問題が解決されたらうれしく思います。そうでない場合は、私に知らせてください。

+0

いいえ、問題は解決しません。 – lbrahim

-2

これは、クロスドメイン要求で問題となる可能性があります。 私はこの問題をあまりにもずっと以前に受けていましたが、代わりにJQueryを使用して解決することができました。
はあなたの<head>タグ

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
<script src="YourScriptNameHere.js" type="text/javascript"></script> 

に下記含めると、あなたのJavaScriptのファイルに:

$(function() { 
    $.ajax({ 
     type: "PUT" 
     , url: "File.xml" 
     , dataType: "xml" 
     , success: parseXml 
    }); 
    function parseXml(xml) { 
     //Your code here 
    } 
}); 
+0

このコードはChromeでは動作しますが、IE 11では動作しません。さらに、jqueryでも同じエラーが発生しました。 – lbrahim

関連する問題