#java #android #google-classroom
#java #Android #google-класс
Вопрос:
Есть ли какой-либо способ загрузить файл с Google Диска в пользовательское местоположение? Я использую этот код для получения файла,
courses.get(0).getCourseMaterialSets().get(0).getMaterials().get(0).getDriveFile()
Эта функция возвращает выходные данные типа файла. Как сохранить его локально?
Или есть какой-нибудь способ загрузить файлы с Google Диска с помощью classroom API?
Ответ №1:
Я не думаю, что есть способ сделать это с помощью Classroom API. Чтобы загрузить файлы с Google Диска, ознакомьтесь с руководством по загрузке файлов с помощью Android API для Drive.
Загрузка файла
Предпочтительный метод: использование alt=media
Чтобы загрузить файлы, вы отправляете авторизованный HTTP-запрос GET на URL-адрес ресурса файла и включаете параметр запроса alt=media. Например:
GET https://www.googleapis.com/drive/v2/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media
Авторизация: предъявитель
ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs Для загрузки файла
пользователю требуется, по крайней мере, доступ для чтения. Кроме того, ваше приложение
должно быть авторизовано с областью, позволяющей считывать содержимое файла.
Например, приложению, использующему область drive.readonly.metadata, не
будет разрешено загружать содержимое файла. Пользователи с
правами на редактирование могут ограничить загрузку пользователями, доступными только для чтения
, установив для метки restricted значение true.
Вот фрагмент из руководства:
/**
* Download a file's content.
*
* @param service Drive API service instance.
* @param file Drive File instance.
* @return InputStream containing the file's content if successful,
* {@code null} otherwise.
*/
private static InputStream downloadFile(Drive service, File file) {
if (file.getDownloadUrl() != null amp;amp; file.getDownloadUrl().length() > 0) {
try {
// uses alt=media query parameter to request content
return service.files().get(file.getId()).executeMediaAsInputStream();
} catch (IOException e) {
// An error occurred.
e.printStackTrace();
return null;
}
} else {
// The file doesn't have any content stored on Drive.
return null;
}
}