这是我第一次提交问题,所以如果我能更好地问这个问题,请帮助我。
我想要:
- 创建文件夹
- 在谷歌团队驱动器中
- 嵌套在现有的团队云端硬盘文件夹“路径”中</li>
- 来自 Google Apps 脚本,可以在脚本文件中或附加到 Google 表格
我相信这些资源会告诉我如何创建 Team Drive 文件夹:
- https://developers.google.com/drive/v3/reference/files/create
- https://developers.google.com/drive/v3/web/simple-upload
- https://developers.google.com/drive/v3/web/folder
方案 A:使用 GAS 创建一个文件夹。经过一番研究,据我了解,普通 GAS 尚无法在 Team Drive 中创建文件夹。
[18-03-15 14:55:23:674 EDT] 执行失败:无法在团队驱动器项目上使用此操作。(第 139 行,文件“utils”)[1.618 秒总运行时间]
//The folder with the current name doesn't exist - create it in the parent folder
var newFolder = DriveApp.createFolder(nextFolderName);
currFolder.addFolder(newFolder);
如果我错了,并且有一种简单的方法可以使 addFolder() 代码与 Team Drive 一起使用,那将是一场胜利。
更新 1:您可以使用普通 GAS 在团队云端硬盘中创建一个文件夹。限制移动的是文件夹。这有效:
//The folder with the current name doesn't exist - create it in the parent folder
var newFolder = currFolder.createFolder(nextFolderName);
所以计划 B:现在,我正在尝试使用 Google Drive REST API v3 创建文件夹。但是,即使 TEAM_ROOT_PATH_FOLDER_ID 在团队驱动器中,当我运行我的代码时,我只会在我的个人驱动器中获得一个无标题文件。我认为我的问题是向 UrlFetchApp.fetch 获取正确的信息。就像没有读取请求正文一样。
参考:
- Google Apps 脚本:UrlFetchApp 发布文件
- https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
这是我使用 Google Apps 脚本和 Drive REST API 创建文件夹的代码:
var TEAM_ROOT_PATH_FOLDER_ID = "diPcXqabvgpX4tcZJZ-ms2Wg0bXf1Fem"; //TODO fill in based on parent folder
function test() {
createTeamDriveFolder(TEAM_ROOT_PATH_FOLDER_ID);
}
function createTeamDriveFolder(parentFolderId) {
//BUILD THE URL
var baseUrl = "https://www.googleapis.com/upload/drive/v3/files/";
var urlParams = { //TODO correct for this function (after you figure this out)
supportTeamDrives: true
//,alt: "json"
,uploadType: "media"
};
//CODE CREDIT: https://ctrlq.org/code/20514-list-team-drives-google-drive-apps-script
var queryString = Object.keys(urlParams).map(function(p) {
return [encodeURIComponent(p), encodeURIComponent(urlParams[p])].join("=");
}).join("&");
var apiUrlStr = baseUrl + "?" + queryString;
//BUILD THE REQUEST - HEADERS AND BODY
var token = ScriptApp.getOAuthToken();
var requestBody = {
mimeType: "application/vnd.google-apps.folder"
,name: "TeamDriveTestFolder"
,"parents": [parentFolderId]
};
var requestBodyStr = JSON.stringify(requestBody);
Logger.log("requestBody: " + requestBodyStr);
var requestParams = {
method: "POST"
,contentType: "application/json"
,contentLength: requestBodyStr.length
,headers: {"Authorization": "Bearer " + token}
,payload: requestBodyStr
};
var response = UrlFetchApp.fetch(apiUrlStr, requestParams);
Logger.log(response.getResponseCode());
Logger.log(response.getContentText());
}
但是,当我通过 API 测试运行 REST 调用时,我可以让一个文件夹出现在我的个人驱动器中(仍然错误):
支持团队驱动器 > 真
WORKS(在个人驱动器根目录中创建的 TeamDriveTestFolder 文件夹):
{
"mimeType": "application/vnd.google-apps.folder",
"name": "TeamDriveTestFolder"
}
失败(404):
{
"mimeType": "application/vnd.google-apps.folder",
"name": "TeamDriveTestFolder",
"parents": ["diPcXqabvgpX4tcZJZ-ms2Wg0bXf1Fem"]
}
感谢您在破解此 Team 文件夹创建方面的任何帮助。