Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MS Graph API大文件上载无法从IE和Edge运行_Javascript_Internet Explorer_Xmlhttprequest_Microsoft Graph Api_Onedrive - Fatal编程技术网

Javascript MS Graph API大文件上载无法从IE和Edge运行

Javascript MS Graph API大文件上载无法从IE和Edge运行,javascript,internet-explorer,xmlhttprequest,microsoft-graph-api,onedrive,Javascript,Internet Explorer,Xmlhttprequest,Microsoft Graph Api,Onedrive,出于某种奇怪的原因,使用MS Graph API的大文件上传在Edge和IE上无法正常工作,但在Chrome上可以正常工作 var auth = 'Bearer 123'; var theFile; function getSessionUrl(filename){ return `https://graph.microsoft.com/v1.0/drives/<driveid>/items/<itemid>/children/${filename}/createUplo

出于某种奇怪的原因,使用MS Graph API的大文件上传在Edge和IE上无法正常工作,但在Chrome上可以正常工作

var auth = 'Bearer 123';
var theFile;
function getSessionUrl(filename){
return `https://graph.microsoft.com/v1.0/drives/<driveid>/items/<itemid>/children/${filename}/createUploadSession`;
}

function chunkedUpload(url,
  file,
  chunkSize = 327680,
  chunkStart = 0,
  chunkEnd = chunkSize,
  chunks = file.size / chunkSize,
  chunksDone = 0,
  fileChunk = file.slice(chunkStart, chunkEnd)) {
  let req = new XMLHttpRequest(),
    fileReader = new FileReader();
  req.open("PUT", url, true);
  req.setRequestHeader("Authorization", auth);
  req.setRequestHeader("Content-Range", "bytes " + chunkStart + "-" + (chunkEnd - 1) + "/" + file.size.toString());
  req.onload = (e) => {
      let response = JSON.parse(req.response);
      if (response.nextExpectedRanges) {
        let range = response.nextExpectedRanges[0].split('-'),
            chunkStart = Number(range[0]),
            nextChunk = chunkStart + chunkSize,
            chunkEnd = nextChunk > file.size ? file.size : nextChunk;
        console.log(((chunksDone++/ chunks) * 100), '%' );
        chunkedUpload(url, file, chunkSize, chunkStart, chunkEnd, chunks, chunksDone);
      } else {
        console.log("upload session complete");
      }
  };
  fileReader.onload = function(fileLoadedEvent) {
    req.send(this.result);
  }; 
  fileReader.readAsArrayBuffer(fileChunk);
}

$("#file").change((event) => {
  var file = event.target.files[0];
  theFile = file;
});

$("#send").click(() => {
    var url = getSessionUrl(theFile.name);
    $.ajax({
    type: "POST",
    url: url,
    headers: {
        authorization: auth
    },
    success: (data) => {
        chunkedUpload(data.uploadUrl, theFile);
    }
    });
});
var auth='Bearer 123';
变量文件;
函数getSessionUrl(文件名){
返回`https://graph.microsoft.com/v1.0/drives//items//children/${filename}/createUploadSession`;
}
函数chunkedUpload(url,
文件
chunkSize=327680,
chunkStart=0,
chunkEnd=chunkSize,
chunks=file.size/chunkSize,
chunksDone=0,
fileChunk=file.slice(chunkStart,chunkEnd)){
让req=new XMLHttpRequest(),
fileReader=新的fileReader();
请求打开(“PUT”,url,true);
请求setRequestHeader(“授权”,auth);
req.setRequestHeader(“内容范围”,“字节”+chunkStart+“-”+(chunkEnd-1)+“/”+file.size.toString());
请求加载=(e)=>{
让response=JSON.parse(req.response);
if(response.nextExpectedRanges){
let range=response.nextExpectedRanges[0]。拆分('-'),
chunkStart=Number(范围[0]),
nextChunk=chunkStart+chunkSize,
chunkEnd=nextChunk>file.size?file.size:nextChunk;
log(((chunksDone++/chunks)*100),“%”);
chunkedUpload(url、文件、chunkSize、chunkStart、chunkEnd、chunks、chunksDone);
}否则{
日志(“上传会话完成”);
}
};
fileReader.onload=函数(fileLoadedEvent){
请求发送(此结果);
}; 
readAsArrayBuffer(fileChunk);
}
$(“#文件”).change((事件)=>{
var file=event.target.files[0];
文件=文件;
});
$(“#发送”)。单击(()=>{
var url=getSessionUrl(文件名);
$.ajax({
类型:“POST”,
url:url,
标题:{
授权:auth
},
成功:(数据)=>{
chunkedUpload(data.uploadUrl,文件);
}
});
});

代码是可执行的,但要再现错误,您必须使用适当的授权令牌替换
auth
,并使用与您的OneDrive对应的适当ID。另一个原因可能是IE的url限制,但这并不能解释它在Edge中失败的原因。
createSession
返回的url长度可以超过2000个字符。失败时您会看到什么错误?@Brad根据我发布的代码,
createSession
通过,然后第一个区块的选项请求返回200个,然后是静默。没有发送请求,IE 11记录以下内容:
SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问被拒绝_显示
。谢谢你的信息。根据你提供的信息,你似乎遇到了CORS问题。我会看看是否可以复制它。是否可以为选项请求提供请求和响应头?我想确保我完全复制了它。