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

时间:2017-05-18 11:28:00

标签: javascript jquery google-api google-drive-api

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

所以场景是:

Folder1
-FolderA
--fileA1
--fileA2
--FolderAA
---fileAA1
---FileAA2
---FolderAAA
----FileAAA1
-FolderB
-FolderC
--FileC1

如果我点击下载文件夹1,我希望它能够下载你看到的所有内容 如果我点击下载文件夹C,他只下载带有filec1的Folderc(或zip)。

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

我已经读过:

Download folder with Google Drive API

2 个答案:

答案 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一起使用。