在文件夹之间移动创建的文件会产生奇怪的“与我共享”行为

时间:2018-10-03 17:42:27

标签: java google-drive-api google-sheets-api service-accounts

我的目标是在特定文件夹中创建电子表格。我正在使用V4表格API创建电子表格,并使用Java中的V3驱动器api创建文件夹。

但是,我不知道是否可以在特定文件夹中创建电子表格。如果有可能(在Java中),请告诉我。

要实现与在文件夹中创建电子表格相同的功能,我先创建电子表格,然后将其移动到之前创建的文件夹下。我正在从这里使用示例代码 https://developers.google.com/drive/api/v3/folder (在文件夹之间移动文件)。

我正在使用服务帐户创建这些文件。

当我创建文件夹和电子表格时,将电子表格移至该文件夹,然后向我的Google帐户添加写入权限,以便能够在浏览器中查看它们,我看到的是在“与我共享”下请参见文件夹F和文件SS-1,以及文件夹F内的相同文件SS-1。 当我打印电子表格文件SS-1的父级时,我只看到一个父级,即文件夹F。

随后,当我添加其他文件SS-2,SS-3等,将其移动到文件夹F下并向我的Google帐户授予写权限时,我只能按预期看到文件夹F下的所有那些文件。

我无法弄清楚代码中是否存在错误,因为当我打印文件SS-1的父文件时,我只能看到一个父文件,这是文件夹F的文件ID。因此不确定为什么我看到该文件SS-1既位于文件夹F下,也位于文件夹F相同级别的“与我共享”下。

是否有任何调试指针?另外,有没有更简单的方法可以直接在特定文件夹中创建电子表格?

1 个答案:

答案 0 :(得分:0)

要直接在给定文件夹中创建文件,请使用Drive API(因为Sheets API完全是关于操纵电子表格的内容(而不是诸如“我可以在哪里找到该电子表格”之类的元数据):

使用原始的REST API,这很简单:

POST https://www.googleapis.com/drive/v3/files?fields=createdTime%2Cid%2Cname%2Cparents

{
  "mimeType": "application/vnd.google-apps.spreadsheet",
  "parents": [
    "some folder id"
  ],
  "name": "API Explorer Sheet in Folder"
}

响应:

{
  "id": "your new spreadsheet's id",
  "name": "API Explorer Sheet in Folder",
  "parents": [
    "some folder id"
  ],
  "createdTime": "2018-10-03T18:30:04.554Z"
}

Demo link
显然,您可以提供其他请求元数据来影响创建的文件。

使用Google的Java客户端库类似地可以向文件夹中添加文件-Drive API的“使用文件夹”页面具有sample code可以完全照张照片。适应模仿上述POST请求的Google表格文件:

String folderId = "some folder id";
File fileMetadata = new File();
fileMetadata.setName("some file title");
fileMetadata.setParents(Collections.singletonList(folderId));
fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet");
File file = driveService.files().create(fileMetadata)
    .setFields("id, parents, name") // properties in the response
    .execute();
System.out.println("File ID: " + file.getId());