Javascript Google Drive API出现奇怪的CORS问题
谷歌硬盘API,文件。更新: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给出了CORS错误,奇怪的是在我创建的同一个驱动程序中,在同一个域上(我直接在线测试):
- 文件。创建API运行正常
- files.update 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);
}