在文件夹之间移动创建的文件会产生奇怪的 "Shared With Me" 行为
Moving created files between folders yields strange "Shared With Me" behavior
我的 objective 是在特定文件夹中创建电子表格。我在 java.
中使用 V4 工作表 API 创建电子表格,并使用 V3 驱动器 api 创建文件夹
但是,我不知道是否可以在特定文件夹中创建电子表格。如果可以(在java),请告诉我。
为了实现在文件夹中创建电子表格的相同功能,我创建了电子表格,然后将其移动到我之前创建的文件夹下。我正在使用此处的示例代码
https://developers.google.com/drive/api/v3/folder
(在文件夹之间移动文件)。
我正在使用服务帐户创建这些。
当我创建文件夹和电子表格时,将电子表格移动到该文件夹,然后向我的 google 帐户添加写入权限以便能够在浏览器中查看它们,我看到的是 "Shared with me" 我可以看到文件夹 F 和文件 SS-1,以及文件夹 F 内的同一个文件 SS-1。
当我打印电子表格文件 SS-1 的父级时,我只看到一个父级,即文件夹 F.
随后,当我添加其他文件 SS-2、SS-3 等时,将其移动到文件夹 F 下并授予我的 google 帐户写入权限,我能够在正如预期的那样,仅文件夹 F。
我不知道我的代码是否有错误,因为当我打印文件 SS-1 的父文件时,我只看到一个父文件,即文件夹 F 的文件 ID。因此不确定为什么我会看到文件 SS-1 既在文件夹 F 下,也直接在 "Shared with me" 下,与文件夹 F.
处于同一级别
任何调试的指针?或者,是否有更简单的方法直接在特定文件夹中创建电子表格?
要直接在给定文件夹中创建文件,您可以使用驱动器 API(因为表格 API 完全是关于处理电子表格的内容(而不是像 "where can I find this spreadsheet"):
使用原始 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 的 "Work with Folders" 页面有 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());
我的 objective 是在特定文件夹中创建电子表格。我在 java.
中使用 V4 工作表 API 创建电子表格,并使用 V3 驱动器 api 创建文件夹但是,我不知道是否可以在特定文件夹中创建电子表格。如果可以(在java),请告诉我。
为了实现在文件夹中创建电子表格的相同功能,我创建了电子表格,然后将其移动到我之前创建的文件夹下。我正在使用此处的示例代码 https://developers.google.com/drive/api/v3/folder (在文件夹之间移动文件)。
我正在使用服务帐户创建这些。
当我创建文件夹和电子表格时,将电子表格移动到该文件夹,然后向我的 google 帐户添加写入权限以便能够在浏览器中查看它们,我看到的是 "Shared with me" 我可以看到文件夹 F 和文件 SS-1,以及文件夹 F 内的同一个文件 SS-1。 当我打印电子表格文件 SS-1 的父级时,我只看到一个父级,即文件夹 F.
随后,当我添加其他文件 SS-2、SS-3 等时,将其移动到文件夹 F 下并授予我的 google 帐户写入权限,我能够在正如预期的那样,仅文件夹 F。
我不知道我的代码是否有错误,因为当我打印文件 SS-1 的父文件时,我只看到一个父文件,即文件夹 F 的文件 ID。因此不确定为什么我会看到文件 SS-1 既在文件夹 F 下,也直接在 "Shared with me" 下,与文件夹 F.
处于同一级别任何调试的指针?或者,是否有更简单的方法直接在特定文件夹中创建电子表格?
要直接在给定文件夹中创建文件,您可以使用驱动器 API(因为表格 API 完全是关于处理电子表格的内容(而不是像 "where can I find this spreadsheet"):
使用原始 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 的 "Work with Folders" 页面有 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());