嘿家伙我有一个谷歌驱动器应用程序。 我可以在哪里下载上传和更多的东西。 问题是我需要能够下载“文件夹”。
所以场景是:
Folder1
-FolderA
--fileA1
--fileA2
--FolderAA
---fileAA1
---FileAA2
---FolderAAA
----FileAAA1
-FolderB
-FolderC
--FileC1
如果我点击下载文件夹1,我希望它能够下载你看到的所有内容 如果我点击下载文件夹C,他只下载带有filec1的Folderc(或zip)。
这些文件很容易下载,因为它们有webContentLink
我已经读过:
答案 0 :(得分:2)
您需要执行Files.list,它将返回每个文件的列表。
{
"kind": "drive#fileList",
"nextPageToken": string,
"incompleteSearch": boolean,
"files": [
files Resource
]
}
循环浏览每个文件并下载它。如果你是在一个单一的请求中做一个方法,那么就没有一个。您需要逐个download每个文件。
答案 1 :(得分:0)
虽然问题已经得到解答,但我遇到了类似的情况并希望分享一些代码。代码递归地挖掘文件夹并将文件保存在精确的层次结构中。
代码是C#,但也非常明显。希望它可以提供一些帮助。
private void downloadFile(DriveService MyService, File FileResource, string path)
{
if (FileResource.MimeType != "application/vnd.google-apps.folder")
{
var stream = new System.IO.MemoryStream();
MyService.Files.Get(FileResource.Id).Download(stream);
System.IO.FileStream file = new System.IO.FileStream(path + @"/" + FileResource.Title, System.IO.FileMode.Create, System.IO.FileAccess.Write);
stream.WriteTo(file);
file.Close();
}
else
{
string NewPath = Path + @"/" + FileResource.Title;
System.IO.Directory.CreateDirectory(NewPath);
var SubFolderItems = RessInFolder(MyService, FileResource.Id);
foreach (var Item in SubFolderItems)
downloadFile(Item, NewPath);
}
}
public List<File> RessInFolder(DriveService service, string folderId)
{
List<File> TList = new List<File>();
var request = service.Children.List(folderId);
do
{
var children = request.Execute();
foreach (ChildReference child in children.Items)
TList.Add(service.Files.Get(child.Id).Execute());
request.PageToken = children.NextPageToken;
} while (!String.IsNullOrEmpty(request.PageToken));
return TList;
}
请注意,此代码是为API v2编写的,{v}中没有Children.List
。如果您使用v3,请将files.list
与?q='parent_id'+in+parents
一起使用。