微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Google Drive 中查找或创建文件夹 修改点:来自:致:注意:参考:

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?