使用Google Drive Api v3创建文件(javascript)

Gem*_*nus 17 javascript google-drive-api

我想使用Google Drive API v3创建包含内容的文件.我已通过OAuth进行身份验证并加载了Drive API.语句如下所示(但生成没有内容的文件):

gapi.client.drive.files.create({
    "name": "settings",
}).execute();
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法弄清楚如何创建一个包含内容的文件.我找不到使用Drive API v3的JavaScript示例.我需要传递一些特殊参数吗?

为简单起见,假设我有一个类似'{"name":"test"}'的字符串,它采用JSON格式,应该是创建文件的内容.

Gem*_*nus 17

不幸的是,我没有找到只使用谷歌驱动器API的答案,而是我遵循Gerardo的评论并使用谷歌请求API.以下是将文件上传到Google云端硬盘的功能.

var createFileWithJSONContent = function(name,data,callback) {
  const boundary = '-------314159265358979323846';
  const delimiter = "\r\n--" + boundary + "\r\n";
  const close_delim = "\r\n--" + boundary + "--";

  const contentType = 'application/json';

  var metadata = {
      'name': name,
      'mimeType': contentType
    };

    var multipartRequestBody =
        delimiter +
        'Content-Type: application/json\r\n\r\n' +
        JSON.stringify(metadata) +
        delimiter +
        'Content-Type: ' + contentType + '\r\n\r\n' +
        data +
        close_delim;

    var request = gapi.client.request({
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': {
          'Content-Type': 'multipart/related; boundary="' + boundary + '"'
        },
        'body': multipartRequestBody});
    if (!callback) {
      callback = function(file) {
        console.log(file)
      };
    }
    request.execute(callback);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您曾经通过`gapi.client.drive`了解如何做到这一点,我很想知道. (10认同)

Mar*_*min 12

使用gapi.client.drive,无法上传文件内容。您只能上传元数据。

相反,建议直接使用 Google REST API。该解决方案使用一个FormData对象来构建多部分表单主体,这简化了实现,并gapi.auth.getToken()检索所需的访问令牌。该解决方案还适用于Google 共享云端硬盘

var fileContent = "sample text"; // fileContent can be text, or an Uint8Array, etc.
var file = new Blob([fileContent], {type: "text/plain"});
var metadata = {
    "name": "yourFilename",
    "mimeType": "text/plain",
    "parents": ["folder id or 'root'"], // Google Drive folder id
};

var accessToken = gapi.auth.getToken().access_token;
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], { type: 'application/json' }));
form.append('file', file);

fetch("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true", {
    method: 'POST',
    headers: new Headers({ 'Authorization': 'Bearer ' + accessToken }),
    body: form,
}).then((res) => {
    return res.json();
}).then(function(val) {
    console.log(val);
});
Run Code Online (Sandbox Code Playgroud)


Aur*_*ata 5

这是解决方案gapi.client.drive

var parentId = '';//some parentId of a folder under which to create the new folder
var fileMetadata = {
  'name' : 'New Folder',
  'mimeType' : 'application/vnd.google-apps.folder',
  'parents': [parentId]
};
gapi.client.drive.files.create({
  resource: fileMetadata,
}).then(function(response) {
  switch(response.status){
    case 200:
      var file = response.result;
      console.log('Created Folder Id: ', file.id);
      break;
    default:
      console.log('Error creating the folder, '+response);
      break;
    }
});
Run Code Online (Sandbox Code Playgroud)

您需要使用以下任一范围进行连接/授权

https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
Run Code Online (Sandbox Code Playgroud)

编辑:它可以创建通过改变谷歌文件(文件,片材等)mimeTypeapplication/vnd.google-apps.folder所支持的一个谷歌的mime类型但是,到目前为止,无法将任何内容上传到创建的文件中。

要上传文件,请使用@Geminus提供解决方案。请注意,您可以上传文本文件或csv文件,并将其内容类型分别设置为google doc或google sheet,然后google会尝试将其转换。我已经对此进行了文本-> doc测试,并且可以正常工作。

  • 但这会创建一个文件夹,而不是文件。 (2认同)