Javascript Google Drive API出现奇怪的CORS问题

Javascript Google Drive API出现奇怪的CORS问题,javascript,web,error-handling,google-drive-api,cors,Javascript,Web,Error Handling,Google Drive Api,Cors,谷歌硬盘API,文件。更新: 这个API给出了CORS错误,奇怪的是在我创建的同一个驱动程序中,在同一个域上(我直接在线测试): 文件。创建API运行正常 files.update API向我提供了CORS错误(浏览器的飞行前请求在响应中找不到允许原点标头) developers.google.com上的文档没有提到CORS问题,一个API正常而另一个不正常会有什么问题 创建和更新的两个函数在这里,但不应该是代码问题,因为CORS是关于脚本的起源,而函数位于同一页上: //在Gdrive中

谷歌硬盘API,文件。更新:

这个API给出了CORS错误,奇怪的是在我创建的同一个驱动程序中,在同一个域上(我直接在线测试):

  • 文件。创建API运行正常
  • files.update API向我提供了CORS错误(浏览器的飞行前请求在响应中找不到允许原点标头)
developers.google.com上的文档没有提到CORS问题,一个API正常而另一个不正常会有什么问题

创建和更新的两个函数在这里,但不应该是代码问题,因为CORS是关于脚本的起源,而函数位于同一页上:

//在Gdrive中创建新文件
//见:https://developers.google.com/drive/api/v3/reference/files/create
//见:https://tanaikech.github.io/2018/08/13/upload-files-to-google-drive-using-javascript
异步函数gdrive\u create\u file(文件夹Id、文件名、Binobj){
变量元数据={
“name”:文件名,//谷歌硬盘上的文件名
“mimeType”:“text/plain”,//谷歌硬盘上的mimeType
“家长”:[Folder_Id],//谷歌硬盘上的文件夹Id
};
//这里gapi用于检索访问令牌。
var Access_Token=gapi.auth.getToken().Access_Token;
var Form=new FormData();
append(“metadata”,新Blob([JSON.stringify(metadata)],{type:'application/JSON'});
表格.append(“文件”,Binobj);
//向Gdrive提出请求
var[Lock,Unlock]=new_Lock();
var File_Id=null;
var Xhr=new XMLHttpRequest();
//Gdrive返回“fields=id”中所示的id
Xhr.open(
“职位”,
"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id"
);
Xhr.setRequestHeader(“授权”、“承载人”+访问令牌);
Xhr.responseType=“json”;
Xhr.onload=()=>{
log(“[Dad's TE]Gdrive file id:”,Xhr.response.id);//检索上载的文件id。
文件_Id=Xhr.response.Id;
如果(文件Id==null)
警报(“无法在Gdrive中创建文件!”);
解锁();
};
发送(表格);
//等待获取结果文件id
等待锁;
返回文件标识;
}
//在Gdrive中更新文件
日志(“此处调试:0”);
异步函数gdrive\u update\u file(文件Id、文件名、Binobj){
变量元数据={
“name”:文件名,//谷歌硬盘上的文件名
“mimeType”:“谷歌硬盘上的text/plain”//mimeType
};
//这里gapi用于检索访问令牌。
var Access_Token=gapi.auth.getToken().Access_Token;
var Form=new FormData();
append(“metadata”,新Blob([JSON.stringify(metadata)],{type:'application/JSON'});
表格.append(“文件”,Binobj);
//向Gdrive提出请求
var[Lock,Unlock]=new_Lock();
var Xhr=new XMLHttpRequest();
//Gdrive返回“fields=id”中所示的id
Xhr.open(
“补丁”,
`https://www.googleapis.com/upload/drive/v3/files/${File\u Id}?uploadType=multipart&fields=Id`
);
Xhr.setRequestHeader(“授权”、“承载人”+访问令牌);
Xhr.responseType=“json”;
Xhr.onload=()=>{
log(“[Dad's TE]Gdrive file id:”,Xhr.response.id);//检索上载的文件id。
文件_Id=Xhr.response.Id;
如果(文件Id==null)
警报(“无法更新Gdrive中的文件!”);
解锁();
};
警报(“开发错误:请参阅控制台日志中的CORS错误!”);
发送(表格);
//等待获取结果文件id
等待锁;
返回文件标识;
}
新锁定功能:

function new_lock(){
var Unlock,Lock=newpromise((Res,Rej)=>{Unlock=Res;});
返回[锁定,解锁];
}

在脚本中,如何修改如下内容?在我的环境中,当我测试您的脚本时,我确认了相同的错误。在这种情况下,当
“patch”
修改为
“patch”
时,错误被删除

修改脚本: 发件人: 致: 或

  • 另外,请删除
    警报(“开发错误:请参阅控制台日志中的CORS错误!”)。使用此选项时,始终显示此选项。请小心这个
  • console.log(Xhr.response)时
    放在
    Xhr.onload=()=>{,,}
    中,您可以看到来自API的响应
注:
  • 在我用
    “PATCH”
    更新文件之后,当我用
    “PATCH”
    测试脚本时,没有发生错误。但是,当使用带有
    “patch”
    的脚本更新新文件时,此类错误再次发生。那么在这种情况下,使用
    “PATCH”
    而不是
    “PATCH”
    怎么样

  • 作为简单的测试脚本,下面的脚本怎么样

      function gdrive_update_file(File_Id,File_Name,Binobj){
        var Metadata = { "name": File_Name, "mimeType": "text/plain" };
        var Access_Token = gapi.auth.getToken().access_token;
        var Form = new FormData();
        Form.append("metadata", new Blob([JSON.stringify(Metadata)], { type: 'application/json' }));
        Form.append("file", Binobj);
        var Xhr = new XMLHttpRequest();
        Xhr.open(
          "PATCH",
          "https://www.googleapis.com/upload/drive/v3/files/" + File_Id + "?uploadType=multipart&fields=id"
        );
        Xhr.setRequestHeader("Authorization", "Bearer " + Access_Token);
        Xhr.responseType = "json";
        Xhr.onload = () => {
          console.log(Xhr.response);
        };
        Xhr.send(Form);
      }
    
参考资料:

在脚本中,如何修改如下内容?在我的环境中,当我测试您的脚本时,我确认了相同的错误。在这种情况下,当
“patch”
修改为
“patch”
时,错误被删除

修改脚本: 发件人: 致: 或

  • 另外,请删除
    警报(“开发错误:请参阅控制台日志中的CORS错误!”)。使用此选项时,始终显示此选项。请小心这个
  • console.log(Xhr.response)时
    放在
    Xhr.onload=()=>{,,}
    中,您可以看到来自API的响应
注:
  • 在我用
    “PATCH”
    更新文件之后,当我用
    “PATCH”
    测试脚本时,没有发生错误。但是,当使用带有
    “patch”
    的脚本更新新文件时,此类错误再次发生。那么在这种情况下,使用
    “PATCH”
    而不是
    “PATCH”
    怎么样

  • 作为简单的测试脚本,下面的脚本怎么样

      function gdrive_update_file(File_Id,File_Name,Binobj){
        var Metadata = { "name": File_Name, "mimeType": "text/plain" };
        var Access_Token = gapi.auth.getToken().access_token;
        var Form = new FormData();
        Form.append("metadata", new Blob([JSON.stringify(Metadata)], { type: 'application/json' }));
        Form.append("file", Binobj);
        var Xhr = new XMLHttpRequest();
        Xhr.open(
          "PATCH",
          "https://www.googleapis.com/upload/drive/v3/files/" + File_Id + "?uploadType=multipart&fields=id"
        );
        Xhr.setRequestHeader("Authorization", "Bearer " + Access_Token);
        Xhr.responseType = "json";
        Xhr.onload = () => {
          console.log(Xhr.response);
        };
        Xhr.send(Form);
      }
    
参考资料:

您能否提供当前脚本以复制您的问题?请编辑您的问题,包括cors错误
Xhr.open(
    "PATCH",
    "https://www.googleapis.com/upload/drive/v3/files/" + File_Id + "?uploadType=multipart&fields=id"
);
  function gdrive_update_file(File_Id,File_Name,Binobj){
    var Metadata = { "name": File_Name, "mimeType": "text/plain" };
    var Access_Token = gapi.auth.getToken().access_token;
    var Form = new FormData();
    Form.append("metadata", new Blob([JSON.stringify(Metadata)], { type: 'application/json' }));
    Form.append("file", Binobj);
    var Xhr = new XMLHttpRequest();
    Xhr.open(
      "PATCH",
      "https://www.googleapis.com/upload/drive/v3/files/" + File_Id + "?uploadType=multipart&fields=id"
    );
    Xhr.setRequestHeader("Authorization", "Bearer " + Access_Token);
    Xhr.responseType = "json";
    Xhr.onload = () => {
      console.log(Xhr.response);
    };
    Xhr.send(Form);
  }