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つだけで、常に同じ名前になります。私はすぐにそれについて行きますか、私がやろうとしていることを達成するためのより良い方法がありますか?
考えられる最初のオプションは、title="File_1.xml" and fileExtension="xml"
のように、ファイルに対して 検索パラメーター でlist
リクエストを送信できることです。空のファイルのリスト(検索基準に一致するものはありません)を返すか、少なくとも1つのファイルのリストを返します。 1つだけの場合-それは簡単です。しかし、さらにある場合は、他のフィールドに基づいてそのうちの1つを選択する必要があります。 gdriveでは、同じ名前のファイルが複数ある可能性があることに注意してください。そのため、指定する検索パラメーターが多いほど良いです。
私の意見では、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() );
}
}
また、「 Files:list 」ページには、ドライブ内のすべてのファイルのメタデータを一覧表示するフォームがあります。これは、いくつかのIDが必要な場合に使用できます。
1つの方法は、作成中に一意のプロパティをファイルに関連付けることです。
properties = "{ \
key='somekey' and \
value='somevalue'
}"
次にクエリを作成します。
query = "title = " + "\'" + title + "\'" + \
AND + "mimeType = " + "\'" + mimeType + "\'" + \
AND + "trashed = false" + \
AND + "properties has " + properties
既に知られているすべてのファイルプロパティ(タイトルなど)は、ここで+プロパティに移動できます。
Googleドライブのファイルをマウスの右ボタンでクリックします。オプションを選択して、メニューから共有できるリンクを取得します。ファイルIDが表示されます。共有を取り消すことを忘れないでください。
ファイルの名前がわかっていて、その特定のファイルを常にダウンロードしたい場合は、次のURLから目的のファイルのIDとその他の属性を簡単に取得できます。 https://developers.google.com/ drive/v2/reference/files/list (下の方にクエリを実行する方法があります)。 qフィールドにtitle = 'your_file_name'と入力して実行します。すぐ下に結果が表示され、その中に「id」フィールドがあるはずです。それがあなたが探しているIDです。
また、次の追加のパラメーターをいじることもできます。 https://developers.google.com/drive/search-parameters
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