36

我正在开发一个 Android 项目,我正在尝试使用 Google Drive API,并且我已经完成了大部分工作,但是我在如何执行下载时遇到了问题。

我无法在任何地方找到如何获取文件 ID 以便执行下载。为了测试,我检索了我的驱动器帐户中的所有文件并将它们添加到列表数组中,然后获取列表中第一个文件的 ID。

然后我将文件 ID 复制到命令中以下载文件,这成功了,但我不知道如何获取我要下载的特定文件的文件 ID。

下面是我用来下载文件的代码。

private void downloadFile()
{
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try 
            {
                com.google.api.services.drive.model.File file = service.files().get("0B-Iak7O9SfIpYk9zTjZvY2xreVU").execute();
                //FileList file = service.files().list().execute();
                //List<com.google.api.services.drive.model.File> fileList = file.getItems();
                //com.google.api.services.drive.model.File fileItem = fileList.get(0);
                //Log.d("FileID" , fileItem.getId());
                //Log.d("Count", "Retreived file list");
                if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0)
                {
                    HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
                    InputStream inputStream = resp.getContent();
                    writeToFile(inputStream);
                }
            } 
            catch (IOException e)
            {
                Log.e("WriteToFile", e.toString());
                e.printStackTrace();
            }
        }
    });
    thread.start();
}

0B-Iak7O9SfIpYk9zTjZvY2xreVU是我下载的文件的文件 ID,当我做一个列表并选择第一个文件时检索它,但我怎么能说我要下载 File_1 并获取它的 ID,然后将其传递给 service.get() .执行功能。

基本上我的最终目标是在我的应用程序中,我将一个 XML 文件上传到 Google Drive,然后再下载该文件。它只会是一个文件,并且始终具有相同的名称。我是马上去做,还是有更好的方法来实现我想要做的事情?

4

7 回答 7

101

在我看来,获取 Google Drive 文件 ID 的最简单、最快的方法是从网络上的 Google Drive。右键单击文件名并选择获取共享链接。链接的最后一部分是文件 ID。然后您可以取消共享。

于 2018-02-18T18:15:16.870 回答
9

此脚本记录驱动器中的所有文件名和 ID:

// Log the name and id of every file in the user's Drive
function listFiles() {
  var files = DriveApp.getFiles();
  while ( files.hasNext() ) {
    var file = files.next();
    Logger.log( file.getName() + ' ' + file.getId() );
  }
}  

此外,“文件:列表”页面末尾有一个表格,列出了驱动器中所有文件的元数据,如果您只需要几个 id,可以使用该表格。

于 2014-08-25T17:00:15.920 回答
6

那么我能想到的第一个选项是,您可以发送带有文件搜索参数list的请求,例如. 它要么返回一个空的文件列表(没有一个匹配 serach 条件),要么返回一个包含至少一个文件的列表。如果它只有一个 - 这很容易。但如果还有更多 - 您必须根据其他一些字段选择其中一个。请记住,在 gdrive 中,您可以拥有多个同名文件。因此,您提供的搜索参数越多越好。title="File_1.xml" and fileExtension="xml"

于 2013-02-25T10:46:34.377 回答
6

在您的 Google Drive 中的文件上单击鼠标右键。选择选项以获取可以从菜单中共享的链接。您现在将看到文件 ID。不要忘记撤消共享。

于 2018-10-17T13:58:11.853 回答
4

一种方法是在创建时将独特的属性与您的文件相关联。

properties = "{ \
    key='somekey' and \
    value='somevalue'
}"

然后创建一个查询。

query = "title = " + "\'" + title + "\'" + \
        AND + "mimeType = " + "\'" + mimeType + "\'" + \
        AND + "trashed = false" + \
        AND + "properties has " + properties

您已知的所有文件属性(标题等)都可以转到此处+属性。

于 2016-06-07T11:13:10.313 回答
1

Stan0 最初的想法不是一个好主意。可以有多个同名文件。非常容易出错的实现。Stan0 的第二个想法是正确的方法。

当您第一次将文件上传到谷歌驱动器存储它的 id(在 SharedPreferences 中可能是最简单的)供以后使用

IE。

file= mDrive.files().insert(body).execute();      //initial insert of file to google drive

whereverYouWantToStoreIt= file.getId(); //now you have the guaranteed unique id 
                                        //of the file just inserted. Store it and use it 
                                        //whenever you need to fetch this file
于 2013-06-21T22:10:27.807 回答
1

如果您知道文件的名称并且您总是想下载该特定文件,那么您可以轻松地从以下网址获取所需文件的 ID 和其他属性:https ://developers.google.com/drive/v2/参考/文件/列表(在底部,您会找到一种运行查询的方法)。在 q 字段中输入 title = 'your_file_name' 并运行它。您应该会在下方看到一些结果,其中应该是一个“id”字段。那就是您要查找的 id。

您还可以使用来自以下网址的其他参数:https ://developers.google.com/drive/search-parameters

于 2013-06-21T22:23:19.117 回答