2016-06-09 4 views
0

Как загрузить файлы на устройстве с App Folder на Google Диске? Эта папка невидима для пользователя, и только конкретное приложение может ее использовать.Android Google Drive API загружает файлы из папки приложения

В принципе, мне нужно загрузить несколько файлов внутри этой папки (некоторые приложения и пользовательские настройки), а затем я хочу загрузить их обратно на устройство. Он работает как некоторая резервная копия для пользовательских данных.

Я сделал создание файлов внутри папки App, и я могу читать их так:

DriveFile appFolderFile = driveApi.getFile(googleApiClient, driveId); 

Но я не знаю, как я могу загрузить существующие файлы, а затем загрузить эти файлы в определенную папку на устройство. Я искал документацию, но не нашел решения.

В документации я нашел, как читать и извлекать содержимое файла, но нет информации о загрузке самого файла.

Может ли кто-нибудь дать мне подсказку о том, как это сделать? Или, может быть, я просто пропустил правильный раздел в документации или это даже невозможно, и я должен использовать REST API?

Update:

Может быть, я получаю это неправильно, и нет никакой разницы между загрузкой содержимого файлов и загрузки файлов?

+1

Вы не можете «загрузить эти файлы в определенную папку на устройстве» с помощью Диска. Что вы можете сделать, это создать новый файл на устройстве, скопировав содержимое, которое вы получаете с Диска. Вам нужно будет создать файл на устройстве самостоятельно. – Anatoli

ответ

1

Для download files, вы делаете авторизованный запрос HTTP GET на сам файл resource URL и включить параметр запроса alt=media как это:

GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media 
Authorization: Bearer ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs 

Загрузка файл требует, чтобы пользователь имел по крайней мере, доступу для чтения. Кроме того, ваше приложение должно быть авторизовано с областью, которая позволяет читать содержимое файла. Например, приложение, использующее область drive.readonly.metadata, не будет иметь права на загрузку содержимого файла. Пользователи с правами на редактирование могут ограничить загрузку пользователями только для чтения, установив для поля viewersCanCopyContent значение true.

Пример выполнения загрузки файла с Drive API:

String fileId = "0BwwA4oUTeiV1UVNwOHItT0xfa2M"; 
OutputStream outputStream = new ByteArrayOutputStream(); 
driveService.files().get(fileId) 
     .executeMediaAndDownloadTo(outputStream); 

После того, как вы загрузили, необходимо использовать параметр parent, чтобы поместить файл в определенную папку, то укажите правильный идентификатор в parents свойство файла.

Пример:

String folderId = "0BwwA4oUTeiV1TGRPeTVjaWRDY1E"; 
File fileMetadata = new File(); 
fileMetadata.setName("photo.jpg"); 
fileMetadata.setParents(Collections.singletonList(folderId)); 
java.io.File filePath = new java.io.File("files/photo.jpg"); 
FileContent mediaContent = new FileContent("image/jpeg", filePath); 
File file = driveService.files().create(fileMetadata, mediaContent) 
     .setFields("id, parents") 
     .execute(); 
System.out.println("File ID: " + file.getId()); 

Проверить это thread.

+0

Итак, этот метод использует API Drive REST, а не API для API для Android. Правильно ли? – Alex