Код: Выделить всё
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
void main() throws Exception {
Drive drive = createDrive();
var localFile = fileOf("some-file");
uploadFile(drive, localFile);
}
private Drive createDrive() throws Exception {
String fileName = System.getenv("CREDENTIALS_FILE");
var credentialFileStream = getClass().getResourceAsStream(fileName);
var credentials = GoogleCredentials
.fromStream(credentialFileStream)
.createScoped(DriveScopes.DRIVE);
var builder =
new Drive.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
GsonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(credentials)
);
return builder.setApplicationName("My app").build();
}
private File fileOf(String name) throws URISyntaxException {
var uri = getClass().getResource(name).toURI();
return new File(uri);
}
private void uploadFile(Drive drive, File localFile) throws IOException {
var metadata = new com.google.api.services.drive.model.File();
metadata.setName(localFile.getName());
metadata.setParents(List.of("my-shared-folder-id"));
var content = new FileContent("text/plain", localFile);
drive
.files()
.create(metadata, content)
.setFields("id")
.execute();
}
< /code>
Это сбои с: < /p>
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
< /code>
Где конкретная ошибка в ответе: < /p>
{
"code": 403,
"errors": [
{
"domain": "usageLimits",
"message": "Service Accounts do not have storage quota. Leverage shared drives (https://developers.google.com/workspace/drive/api/guides/about-shareddrives), or use OAuth delegation (http://support.google.com/a/answer/7281227) instead.",
"reason": "storageQuotaExceeded"
}
],
"message": "Service Accounts do not have storage quota. Leverage shared drives (https://developers.google.com/workspace/drive/api/guides/about-shareddrives), or use OAuth delegation (http://support.google.com/a/answer/7281227) instead."
}
< /code>
Я не понимаю, что делаю не так. Я могу успешно list файлы в общей папке с использованием той же учетной записи службы (если я изменяюсь с использования drivescopes.drive Подробнее здесь: https://stackoverflow.com/questions/797 ... ut-listing