【问题标题】:How to create a folder on Google Drive using javascript如何使用 javascript 在 Google Drive 上创建文件夹
【发布时间】:2020-06-22 03:46:10
【问题描述】:

现在我正在使用此代码将文件上传到 Google 云端硬盘: https://stackoverflow.com/a/11657773/1715263 它适用于文本文件。

我正在尝试使用来自 Google 的以下信息创建一个文件夹: https://developers.google.com/drive/folder

所以谷歌说“内容类型:应用程序/json”进入标题,“应用程序/vnd.google-apps.folder”应该是正文中的mimetype(?),这就是我在我的代码,现在看起来像这样:

function createFolder() 
{
    var access_token = googleAuth.getAccessToken();

    var json = JSON.stringify({
        mimeType: 'application/vnd.google-apps.folder',
        title: 'Folder',
    });

    var body =  "Content-Type: application/json" + "\r\n" +
                "Content-Length: " + json.length + "\r\n" + "\r\n" +
                json;

    gapi.client.request({

        'path': '/upload/drive/v2/files/',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer ' + access_token,             
        },
        'body': body
    }).execute(function(file) { 
        document.getElementById("info").innerHTML = "Created folder: " + file;
    }); 

但它只是创建一个名为“Untitled”的文件,它不是文件夹,你无法打开它。

当我将“headers”部分中的“Content-Type”更改为“application/vnd.google-apps.folder”并删除“body”部分时,它会创建一个名为“Untitled”的文件夹。

我怎样才能让它创建一个具有特定标题的文件夹?

【问题讨论】:

    标签: javascript google-drive-api


    【解决方案1】:

    终于通过谷歌搜索 Claudios 代码让它工作了,这让我找到了这段代码:https://stackoverflow.com/a/11361392/1715263

    重要的改变是“路径”,它现在是“/drive/v2/files/”而不是“/upload/drive/v2/files/”。 我刚刚删除了 'gapi.client.load'-function,添加了 headers 信息并更改了 bodys mimeType。

    代码如下:

    function createFolder() {
    
       var access_token = googleAuth.getAccessToken();
    
       var request = gapi.client.request({
           'path': '/drive/v2/files/',
           'method': 'POST',
           'headers': {
               'Content-Type': 'application/json',
               'Authorization': 'Bearer ' + access_token,             
           },
           'body':{
               "title" : "Folder",
               "mimeType" : "application/vnd.google-apps.folder",
           }
       });
    
       request.execute(function(resp) { 
           console.log(resp); 
           document.getElementById("info").innerHTML = "Created folder: " + resp.title;
       });
    }
    

    【讨论】:

    • 检查文件是否已经存在的唯一方法是执行搜索吗?或者是否也可以自己传递一个唯一的 ID?
    • 当您创建文件夹或上传文件时,您可以通过“resp.id”(在我的代码示例中)在“request.execute”回调函数中访问其唯一 ID。然后,您可以将该 ID 保存在某处并访问其相关文件,如下所示 stackoverflow.com/a/14431112/1715263 最后,只需添加一些错误处理:if (!resp.error) {console.log("File already exists: " + resp.title);} else {console.log("File not found: " + resp.error.message);
    • 非常感谢。我认为您的回答确实会帮助其他用户。但是,Google Drive 我唯一的存储空间,所以很遗憾我无法保存 id。我只知道文件名本身。所以我想我一直在寻找。
    • 我明白了。我能想到的唯一解决方案是通过添加一些随机字符然后搜索它来为您的文件提供唯一的文件名,这与通过其 ID 访问文件没有什么不同,因为无论如何它都以某种方式被索引。另一种方法是使用“应用程序数据文件夹”,这是一个只能由您的应用程序访问的特殊文件夹,因此您可以确保您的文件没有重复:developers.google.com/drive/appdata
    【解决方案2】:

    试试下面的代码:

    function createFolder(folderName) {
      var body = {
        'title': folderName,
        'mimeType': "application/vnd.google-apps.folder"
      };
    
      var request = gapi.client.drive.files.insert({
        'resource': body
      });
    
      request.execute(function(resp) {
        console.log('Folder ID: ' + resp.id);
      });
    }
    

    【讨论】:

    • 嘿!感谢您的快速回复:) 当我尝试您的代码时,我收到错误“未捕获的 TypeError:无法读取未定义的属性'文件'”然后我搜索了您的代码并找到了这个:stackoverflow.com/a/11361392/1715263 这帮助我最终让它工作: )
    • 'name' 而不是 'title',至少对于 drive v2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多