在 Google 云端硬盘中查找或创建文件夹
Find or create folder in 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', new Blob([JSON.stringify(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的“Files: list”方法中,使用了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
可以用于使用“Files:list”的方法。请注意这一点。
- 当您的 Google 驱动器中有多个具有相同文件夹名称的文件夹时,您可以检查
var res = xhr.response.files
。
参考:
语境:建筑精彩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', new Blob([JSON.stringify(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的“Files: list”方法中,使用了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
可以用于使用“Files:list”的方法。请注意这一点。 - 当您的 Google 驱动器中有多个具有相同文件夹名称的文件夹时,您可以检查
var res = xhr.response.files
。