如何解决创建单个文件/文件夹并立即使用它们的 ID? 谷歌云端硬盘 API
问题的简短版本:
使用 Javascript,我想在结构中创建文件夹,确认是否存在任何/全部/不存在的文件夹。因此,给定文件夹名称“A”、“B”、“C”和“D”,创建“A”,将其放入根目录,然后创建“B”,并将其放入“A”,依此类推。问题是,无论我如何构造它,所有文件夹都是异步插入的,这意味着它们没有各自的 ParentId,而且它们都以根目录结束。
带有 WIP 的长版:
我正在尝试一次创建三个(或更多)文件夹,它们都在同一路径上。
例如,如果我希望文件路径为 State\City\Street。我首先将文件夹按所需顺序排列在一个数组中(请注意,在我的最终项目中,这些文件夹不会被硬编码,而是根据他们正在查看的用户和 salesforce 记录动态命名)。
const filePath = ["State","City","Street"];
然后我将它传递给这个方法,该方法假设一次创建一个文件夹,使用前一个文件夹的 Id 作为它的 parentId。
function createFolder() {
var parentFolderId = "root";
for (let i = 0; i < filePath.length; i++) {
var folderMetadata = {
'name' : filePath[i],'mimeType' : 'application/vnd.google-apps.folder','parents': [parentFolderId]
}
gapi.client.drive.files.create({
resource: folderMetadata,}).then(function(response) {
switch(response.status){
case 200:
var file = response.result;
parentFolderId = file.Id;
console.log(i + ' file.Id= ' + file.Id);
break;
default:
console.log('Error creating the folder,' + response);
break;
}
});
}
}
但是,所有文件夹都是在函数完成后,在“parentFolderId = file.Id;”之前创建的line 运行,所以它们都被放入 root。
我意识到我可以创建所有文件夹,查询它们,然后重新排列它们。但是,我项目的下一部分是动态确定这些文件夹中的任何一个/所有文件夹是否已经存在,并且文件夹结构可能会有很大差异。
解决方法
好的,稍微调整一下,@Alessandro 在 this question 上的解决方案对我有用:
- 为了便于阅读,我颠倒了方法的顺序。
- 我合并了一个 FOR 循环,因为我的文件结构将包含许多文件夹。循环是通过包含文件路径中文件夹名称的字符串数组。
- 我注意到 (!parent) 没有正确返回,因为它是“未定义”,而不是“空”。此外,当找不到现有文件夹时期望“null”是至关重要的,所以我默认 parentId 为“root”,因为我知道我的第一个文件夹将始终位于根目录
- 变量 newFolderId 保存找到/创建的文件夹的值,并传递到 parentId 以供 FOR 循环的下一次迭代
- 最后,我将“'parent':parent”更新为“'parents':[parent]”。那个“s”和那些括号似乎是必要的,否则每个创建的文件夹都放在根目录下。
async function buildFilePath() {
console.log("buildFilePath()");
var parentId = "root";
for (let i = 0; i < filePath.length; i++) {
var folderName = filePath[i];
newFolderId = await getFolder(folderName,parentId);
console.log(folderName + " id is " + newFolderId + ",parentId is " + parentId);
if (newFolderId == null) {
newFolderId = await createFolder(folderName,parentId);
console.log ("created new folder " + folderName + " with Id " + parentId);
} else {
// parentId = newParentId;
console.log (folderName + " already exist,move on to next.");
}
parentId = newFolderId;
}
}
async function getFolder(name,parent) {
const res = await gapi.client.drive.files.list({
'pageSize': 1,'fields': "nextPageToken,files(id,name,mimeType,parents)",'q': "mimeType='application/vnd.google-apps.folder' \
and '" + parent + "' in parents \
and name = '" + name + "' \
and trashed = false"
});
return res.result.files.length > 0 ? res.result.files[0]['id'] : null;
}
async function createFolder(name,parent) {
if (!parent) parent = 'root';
var fileMetadata = {
'name': name,'mimeType': 'application/vnd.google-apps.folder','parents': [parent]
};
const res = await gapi.client.drive.files.create({
'resource': fileMetadata,'fields': 'id'
});
return res.result['id'];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。