Мне просто не удается загрузить файл с Google Drive, я только что создал. Я могу получить webContentLink. Если я получаю доступ к этому через браузер, я могу загрузить файл, но я не могу загрузить тот же файл через свое приложение ... Я читаю почти каждую документацию о Google Диске, но я не мог найти способ загрузить файл в мое хранилище.Загрузите файл с Google Drive с помощью google-api-services-drive: v3
Здесь я получаю ссылку на файл ... я могу получить то, что когда-нибудь я хочу, как этот
downloadLink = m.getAlternateLink();
downloadLink = m.getEmbedLink();
downloadLink = m.getWebContentLink();
downloadLink = m.getWebViewLink();
или любого другого параметра, как DriveId ...
Вот мой код, чтобы получить это информация для файла на Диске:
Query query2 = new Query.Builder()
.addFilter(Filters.and(Filters.eq(
SearchableField.TITLE, "locations.csv"),
Filters.eq(SearchableField.TRASHED, false)))
.build();
Drive.DriveApi.query(mGoogleApiClient, query2)
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult result) {
if (!result.getStatus().isSuccess()) {
System.out.println("File does not exists");
} else {
for(Metadata m : result.getMetadataBuffer()) {
if (m.getTitle().equals("locations.csv")) {
downloadLink = m.getWebContentLink();
}
}
}
}
});
В этой папке есть только один файл, я уверен. Так что мне просто нужен способ получить этот файл, загруженный в фоновом режиме на SD-карту или лучшую конкретную папку.
Любая помощь приветствуется! Благодарю.
МОЕ РЕШЕНИЕ
По щелчку где-то в коде
driveFileMy.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
.setResultCallback(contentsOpenedCallback);
тогда я делаю это:
final private ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback =
new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
// display an error saying file can't be opened
return;
}
// DriveContents object contains pointers
// to the actual byte stream
DriveContents contents = result.getDriveContents();
InputStream inputStream = contents.getInputStream();
OutputStream out = null;
try {
out = new FileOutputStream(filelocation);
byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
out.flush();
inputStream.close();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
Строка filelocation является расположение выходного файла, где он должен быть сохранены. Всем спасибо :)!
Если у вашей downloadLink есть ссылка, которую вы можете использовать для загрузки через браузер, она не только открывает эту ссылку с InputStream и сохраняет содержимое на вашей SD-карте? – jonathanrz