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()に渡すにはどうすればよいですか。 .execute関数。

基本的に、私の最終目標はアプリ内です。XMLファイルをGoogleドライブにアップロードし、後でファイルをダウンロードします。これは1つのファイルのみであり、常に同じ名前になります。私はすぐにそれについて行っていますか、それとも私がやろうとしていることを達成するためのより良い方法がありますか?

4

7 に答える 7

6

私が考えることができる最初のオプションは、ファイルの検索パラメーターlistを含むリクエストを送信できることです. ファイルの空のリストを返す (検索条件に一致するファイルがない) か、少なくとも 1 つのファイルを含むリストを返します。1つだけなら - 簡単です。ただし、複数ある場合は、他のフィールドに基づいてそのうちの 1 つを選択する必要があります。gdrive では、同じ名前のファイルが複数存在する可能性があることに注意してください。そのため、提供する検索パラメーターが多いほど良い結果が得られます。title="File_1.xml" and fileExtension="xml"

于 2013-02-25T10:46:34.377 に答える
4

1 つの方法は、作成中に一意のプロパティをファイルに関連付けることです。

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

ファイルの名前を知っていて、常にその特定のファイルをダウンロードしたい場合は、目的のファイルの ID とその他の属性をhttps://developers.google.com/drive/v2/から簡単に取得できます。 reference/files/list (下の方にクエリを実行する方法があります)。q フィールドに title = 'your_file_name' と入力して実行します。すぐ下に結果が表示され、その中に「id」フィールドがあるはずです。それがあなたが探しているIDです。

https://developers.google.com/drive/search-parametersから追加のパラメーターをいじることもできます。

于 2013-06-21T22:23:19.117 に答える
1

Stan0 の最初のアイデアは良いアイデアではありません。同じ名前のファイルが複数存在する場合があります。非常にエラーが発生しやすい実装。Stan0 の 2 番目のアイデアは正しい方法です。

ファイルを最初にGoogleドライブにアップロードするときは、後で使用するためにその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
于 2013-06-21T22:10:27.807 に答える