Javascript 下载整个文件夹(google drive api)

Javascript 下载整个文件夹(google drive api),javascript,jquery,google-api,google-drive-api,Javascript,Jquery,Google Api,Google Drive Api,嘿,伙计,我有一个谷歌驱动程序。 在那里我可以下载上传和更多的东西。 问题是,我需要能够下载“文件夹”以及 因此,情况是: Folder1 -FolderA --fileA1 --fileA2 --FolderAA ---fileAA1 ---FileAA2 ---FolderAAA ----FileAAA1 -FolderB -FolderC --FileC1 如果我点击下载文件夹1,我想让它下载你看到的所有东西 如果我点击DownloadFolderC,他只下载带有文件C1的folderC

嘿,伙计,我有一个谷歌驱动程序。 在那里我可以下载上传和更多的东西。 问题是,我需要能够下载“文件夹”以及

因此,情况是:

Folder1
-FolderA
--fileA1
--fileA2
--FolderAA
---fileAA1
---FileAA2
---FolderAAA
----FileAAA1
-FolderB
-FolderC
--FileC1
如果我点击下载文件夹1,我想让它下载你看到的所有东西 如果我点击DownloadFolderC,他只下载带有文件C1的folderC(或zip)

这些文件很容易下载,因为它们有
webContentLink

我已经读过:

您需要执行一项操作,该操作将返回每个文件的列表

{
  "kind": "drive#fileList",
  "nextPageToken": string,
  "incompleteSearch": boolean,
  "files": [
    files Resource
  ]
}

循环浏览每个文件并下载它。如果你想在一个请求中找到一种方法,那么就没有了。您将需要逐个检查每个文件

虽然问题已经得到了回答,但我也遇到了类似的情况,我想与大家分享一些代码。代码递归地搜索文件夹,并将文件保存在精确的层次结构中

代码是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;
}
private void下载文件(DriveService MyService、文件FileResource、字符串路径)
{
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(路径+@“/+FileResource.Title,System.IO.FileMode.Create,System.IO.FileAccess.Write);
stream.WriteTo(文件);
file.Close();
}
其他的
{
字符串NewPath=Path+/“+FileResource.Title;
System.IO.Directory.CreateDirectory(NewPath);
var SubFolderItems=pressinfolder(MyService,FileResource.Id);
foreach(子文件夹项中的变量项)
下载文件(项目,新路径);
}
}
公共列表文件夹(DriveService服务,字符串文件夹ID)
{
List TList=新列表();
var请求=service.Children.List(folderId);
做
{
var children=request.Execute();
foreach(ChildReference child在children.Items中的子项)
TList.Add(service.Files.Get(child.Id.Execute());
request.PageToken=children.NextPageToken;
}而(!String.IsNullOrEmpty(request.PageToken));
返回列表;
}

请注意,此代码是为API v2和
子级编写的。API v3中没有列表。请务必使用
文件。如果使用v3,请在+parents中列出
?q='parent\u id'+和

可能的Hmm副本没有其他解决方案,然后逐个下载?Thnx用于快速回复,这是唯一的选项。我同意如果我们能批量下载完整的目录就好了。然而,谷歌将此留给开发者.Thnx来帮助他们\