如何解决在 Google Drive 中查找或创建文件夹 修改点:来自:致:注意:参考:
背景:以美妙的Screenity Chrome Extension为基础:
- 现有:保存到 Google 云端硬盘的功能
- 补充:我正在尝试保存到特定文件夹(例如“Screenity”),如果该文件夹当前不存在,则创建该文件夹。 (这让共享变得更加容易,因为我可以与我的团队共享整个文件夹,而不是每个单独的视频。)
问题:我已经能够成功创建一个具有所需名称的新文件夹,但即使在创建后我也无法找到该文件夹。
这个 node.js 应该获取我的文件夹 ID,但它只是返回“未定义”:
function saveDrive() {
chrome.identity.getAuthToken({ 'interactive': true },function(token) {
if (!token) {
return;
}
var Metadata = {
q: "mimeType = 'application/vnd.google-apps.folder' and name = 'TESTSCREENITYFOLDER'"
};
var form = new FormData();
form.append('Metadata',new Blob([JSON.stringify(Metadata)],{type: 'application/json'}));
// Upload to Drive
var xhr = new XMLHttpRequest();
xhr.open('GET','https://www.googleapis.com/drive/v3/files');
xhr.setRequestHeader('Authorization','Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
var folderId = xhr.response.files.data.id;
// Open folder in Drive in a new tab
chrome.tabs.create({
url: "https://drive.google.com/drive/u/0/folders/"+folderId
});
};
xhr.send(form);
});
}
另一方面,这对于创建文件夹非常有效:
function saveDrive() {
chrome.identity.getAuthToken({ 'interactive': true },function(token) {
if (!token) {
return;
}
var folderName = "Screenity"
var Metadata = {
name: [folderName],mimeType: 'application/vnd.google-apps.folder'
};
var form = new FormData();
form.append('Metadata',{type: 'application/json'}));
var xhr = new XMLHttpRequest();
xhr.open('POST','https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart');
xhr.setRequestHeader('Authorization','Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
var folderId = xhr.response;
$("#share span").html("Save to Drive");
$("#share").css("pointer-events","all");
// Open file in Drive in a new tab
chrome.tabs.create({
url: "https://drive.google.com/drive/u/0/folders/"+folderId
});
};
xhr.send(form);
});
}
知道我在第一个代码块中出错的地方,我试图获取特定命名文件夹的 ID 吗?
解决方法
修改点:
- 在Drive API v3 的“文件:列表”方法中,使用了GET 方法。因此请求中不使用
form
的请求正文。在这种情况下,需要使用q
的搜索查询作为查询参数。
当以上几点反映到你的脚本中时,它变成如下。
来自:
var metadata = {
q: "mimeType = 'application/vnd.google-apps.folder' and name = 'TESTSCREENITYFOLDER'"
};
var form = new FormData();
form.append('metadata',new Blob([JSON.stringify(metadata)],{type: 'application/json'}));
// Upload to Drive
var xhr = new XMLHttpRequest();
xhr.open('GET','https://www.googleapis.com/drive/v3/files');
xhr.setRequestHeader('Authorization','Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
var folderId = xhr.response.files.data.id;
// Open folder in Drive in a new tab
chrome.tabs.create({
url: "https://drive.google.com/drive/u/0/folders/"+folderId
});
};
xhr.send(form);
致:
const url = 'https://www.googleapis.com/drive/v3/files?q=' + encodeURIComponent("mimeType = 'application/vnd.google-apps.folder' and name = 'TESTSCREENITYFOLDER'");
var xhr = new XMLHttpRequest();
xhr.open('GET',url);
xhr.setRequestHeader('Authorization','Bearer ' + token);
xhr.responseType = 'json';
xhr.onload = () => {
var res = xhr.response.files;
if (res.length > 0) {
var folderId = res[0].id;
console.log(folderId); // You can check the retrieved folder ID here.
// Open folder in Drive in a new tab
chrome.tabs.create({
url: "https://drive.google.com/drive/u/0/folders/"+folderId
});
} else {
console.log("The folder of 'TESTSCREENITYFOLDER' was not found.");
}
};
xhr.send();
注意:
- 在此修改中,假设您的
token
可以用于使用“文件:列表”的方法。请注意这一点。 - 当您的 Google 云端硬盘中有多个文件夹名称相同时,您可以使用
var res = xhr.response.files
查看。
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。