簡體   English   中英

如何獲取文件ID,以便我可以在Android上從Google Drive API下載文件?

[英]How to get the file ID so I can perform a download of a file from Google Drive API on Android?

我正在開發一個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然后將其傳遞給服務。 get()。執行函數。

基本上我的最終目標是在我的應用程序中,我將XML文件上傳到Google雲端硬盤,然后再下載文件。 它只是一個文件,並且始終具有相同的名稱。 我是馬上去做的還是有更好的方法來實現我想做的事情?

在我看來,獲取Google雲端硬盤文件ID的最簡單快捷的方法是通過網絡上的Google雲端硬盤獲取。 右鍵單擊文件名,然后選擇“ 獲取可共享鏈接” 鏈接的最后一部分是文件ID。 然后你可以取消共享。

此腳本記錄驅動器中的所有文件名和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時使用。

一種方法是在創建時將唯一屬性與文件相關聯。

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

然后創建一個查詢。

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

您已知的所有文件屬性(標題等)都可以在此處+屬性。

我能想到的第一個選項是你可以發送一個帶有你文件搜索參數list請求,比如title="File_1.xml" and fileExtension="xml" 它將返回一個空的文件列表(沒有一個匹配serach標准),或返回一個至少包含一個文件的列表。 如果它只有一個 - 這很容易。 但如果還有更多 - 你必須根據其他一些領域選擇其中一個。 請記住,在gdrive中,您可以擁有多個具有相同名稱的文件。 因此,您提供的搜索參數越多越好。

點擊Google雲端硬盤中文件的鼠標右鍵。 選擇選項以獲取可從菜單共享的鏈接。 您現在將看到文件ID。 不要忘記撤消共享。

Stan0最初的想法並不是一個好主意。 可以有多個具有相同名稱的文件。 非常容易出錯。 Stan0的第二個想法是正確的方法。

當您首次將文件上傳到谷歌驅動器存儲時,其ID(在SharedPreferences中可能是最簡單的)供以后使用

即。

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

如果您知道該文件的名稱,並且始終要下載該特定文件,則可以從以下網址輕松獲取所需文件的ID和其他屬性: https//developers.google.com/drive/v2/ reference / files / list (在底部你會找到一種運行查詢的方法)。 在q字段中輸入title ='your_file_name'並運行它。 你應該看到一些結果顯示在下面,其中應該是一個“id”字段。 這是你正在尋找的id。

您還可以使用以下附加參數: https//developers.google.com/drive/search-parameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM