Загрузить файл в общую папку Google Drive, используя Java с Google Drive API V3? - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно загрузить файлы в общее местоположение на Google Диске (которое мне не принадлежит, а скорее поделились со мной), используя Java. Используя Drive API s, мы можем загружать файлы в место на диске, которое принадлежит пользователю, но не нашли никакого решения, позволяющего выгрузку в общую папку. Вариант использования - это что-то вроде того, как разные пользователи приложения должны загружать файлы в общую папку Google Диска. Есть несколько других вопросов (например, this ), задаваемых по этой теме c, но ни один из них не имеет правильного ответа. Пожалуйста, помогите, если это возможно, или сообщите, что это невозможно сделать программным путем.

1 Ответ

0 голосов
/ 12 апреля 2020

Я нашел решение с помощью коллеги-комментатора @MateoRandwolf, отсюда выкладываю ответ. Надеюсь, это поможет ..

Согласно этой документации , параметр supportsAllDrives=true сообщает Google Drive, что ваше приложение предназначено для обработки файлов на общих дисках. Но также упоминается, что параметр supportsAllDrives будет действителен до 1 июня 2020 года. После 1 июня 2020 года предполагается, что все приложения будут поддерживать общие диски. Поэтому я попытался использовать Google Drive V3 Java API и обнаружил, что общие диски в настоящее время поддерживаются по умолчанию в методе execute класса Drive.Files.Create API V3. Прикрепление примера кода кода для других ссылок. Этот метод uploadFile загружает файл в папку на диске Google с помощью прямой загрузки и возвращает загруженный идентификатор файла.

public static String uploadFile(Drive drive, String folderId) throws IOException {

    /*
    * drive: an instance of com.google.api.services.drive.Drive class
    * folderId: The id of the folder where you want to upload the file, It can be
    * located in 'My Drive' section or 'Shared with me' shared drive with proper 
    * permissions.
    * */

    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 = drive.files().create(fileMetadata, mediaContent)
                                    .setFields("id")
                                    .execute();
    System.out.println("File ID: " + file.getId());
    return file.getId();
}
...