java как создать папку на общем диске, используя сервисный аккаунт для аутентификации - PullRequest
1 голос
/ 28 мая 2020

У меня проблема, папка id не найдена , я хочу создать файл на общем диске внутри папки, которую я подготовил ранее, это мой код

public static void main (String[]args) throws GeneralSecurityException, IOException {

    Drive service = CreateFolder.createService();
    try {
        String key = "1kM_fdJek3b4sErr_xxx";
        File fileMetadata = new File();
        fileMetadata.setName("invoice");
        fileMetadata.setParents(Collections.singletonList(key));
        fileMetadata.setMimeType("application/vnd.google-apps.folder");


        File file = service.files().create(fileMetadata)
                .setFields("id , parents").execute();


        System.out.println("folder successfully created by id " + file.getName());
    } catch (Exception e) {
        e.printStackTrace();

    }
}

@SuppressWarnings("deprecation")
private static Drive createService() throws GeneralSecurityException, IOException {

    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = new  GoogleCredential.Builder()
              .setTransport(HTTP_TRANSPORT)
              .setJsonFactory(JSON_FACTORY)
              .setServiceAccountId("my-email-id")
              .setServiceAccountScopes(SCOPES)
              .setServiceAccountPrivateKeyFromP12File(new java.io.File("privateKey.p12"))
              .build();


    return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME).build();
}

это 1kM_fdJek3b4sErr_xxx ключ папки, я использую сервисный аккаунт для авторизации, и это мой файл закрытого ключа privateKey.p12 . моему идентификатору электронной почты предоставлен доступ к общему диску (my-email-id - это диспетчер содержимого). Но у меня возникает проблема с тем, что идентификатор папки не найден, как в сообщении ниже

{  
"code" : 404,
    "errors" : [ {
        "domain" : "global",
        "location" : "fileId",
        "locationType" : "parameter",
        "message" : "File not found: 1kM_fdJek3b4sErr_xxx.",
        "reason" : "notFound"
      } ],
      "message" : "File not found: 1kM_fdJek3b4sErr_xxx."
}

Мне нужна помощь в создании файл в папке на общем диске

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Я получаю информацию по этой ссылке https://developers.google.com/drive/api/v3/enable-shareddrives

добавьте этот код

.setSupportsTeamDrives(true)

этот полный код

File file = service.files().create(fileMetadata)
                .setSupportsTeamDrives(true)
                .setFields("id , parents").execute();
0 голосов
/ 28 мая 2020

моему идентификатору электронной почты предоставлен доступ к общему диску (my-email-id - это диспетчер содержимого). Но у меня возникает проблема, заключающаяся в том, что идентификатор папки не найден, как в сообщении ниже

Учетная запись службы - это НЕ вы. Учетная запись службы - это собственный фиктивный пользователь, у нее есть собственная учетная запись диска. Предоставление себе доступа к общему диску не предоставит доступ к нему учетной записи службы. Предоставьте общий доступ к папке учетной записи службы, взяв адрес электронной почты учетной записи службы и предоставив ему разрешения для папки. После этого он сможет увидеть папку.

...