在 google 驱动器 rest api java 中插入文件时出现权限异常
Permission exception while inserting file in google drive rest api java
我正在尝试使用驱动器剩余 api 将文件上传到 google 驱动器,然后 tutorial。
授权,函数为:
public static Credential authorize() throws IOException {
// Load client secrets.
InputStream in =
DriveQuickstart.class.getResourceAsStream("client_secret.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
System.out.println(
"Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}
我的获取驱动器中所有文件的功能工作得很好。
private static void listFiles(Drive service) throws IOException
{
// Print the names and IDs for up to 10 files.
FileList result = service.files().list().setMaxResults(10).execute();
List<File> files = result.getItems();
if (files == null || files.size() == 0) {
System.out.println("No files found.");
} else {
System.out.println("Files:");
for (File file : files) {
System.out.printf("%s (%s)\n", file.getTitle(), file.getId());
}
}
}
但是当我尝试在驱动器中创建和插入文件时出现异常,函数和异常如下:
private static void insertFile(Drive service, String title, String description) {
// File's metadata.
File file = new File();
file.setTitle(title);
file.setDescription(description);
file.setMimeType("application/vnd.google-apps.drive-sdk");
try {
file = service.files().insert(file).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Print the new file ID.
System.out.println("File ID: %s" + file.getId());
}
例外情况是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
文件 ID:%snull
在 com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
在 com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
在 com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest. 执行(AbstractGoogleClientRequest.java:469)
在 com.teamchat.google.sheet.integration.DriveQuickstart.insertFile(DriveQuickstart.java:137)
在 com.teamchat.google.sheet.integration.DriveQuickstart.main(DriveQuickstart.java:110)
这只是一个简单的 java 项目并使用 OAuth。
因此我能够获取文件列表但无法将文件插入 google 驱动器。
谁能告诉我我做错了什么。
"reason" : "insufficientPermissions"
这意味着您在获得授权时设置的范围不允许您在资源上写入。
设置正确的范围https://developers.google.com/drive/web/scopes or https://developers.google.com/resources/api-libraries/documentation/drive/v2/java/latest/com/google/api/services/drive/DriveScopes.html
通常:
private static final List<String> SCOPES =
Arrays.asList(DriveScopes.DRIVE_FILE);
问题出在范围
将此行更改为
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY);
至
private static final List<String> SCOPES = new ArrayList(DriveScopes.all());"
或根据您的 need.Read this
更改范围的值
并记得删除令牌文件夹并重新 运行 应用程序。
我正在尝试使用驱动器剩余 api 将文件上传到 google 驱动器,然后 tutorial。
授权,函数为:
public static Credential authorize() throws IOException {
// Load client secrets.
InputStream in =
DriveQuickstart.class.getResourceAsStream("client_secret.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
System.out.println(
"Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}
我的获取驱动器中所有文件的功能工作得很好。
private static void listFiles(Drive service) throws IOException
{
// Print the names and IDs for up to 10 files.
FileList result = service.files().list().setMaxResults(10).execute();
List<File> files = result.getItems();
if (files == null || files.size() == 0) {
System.out.println("No files found.");
} else {
System.out.println("Files:");
for (File file : files) {
System.out.printf("%s (%s)\n", file.getTitle(), file.getId());
}
}
}
但是当我尝试在驱动器中创建和插入文件时出现异常,函数和异常如下:
private static void insertFile(Drive service, String title, String description) {
// File's metadata.
File file = new File();
file.setTitle(title);
file.setDescription(description);
file.setMimeType("application/vnd.google-apps.drive-sdk");
try {
file = service.files().insert(file).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Print the new file ID.
System.out.println("File ID: %s" + file.getId());
}
例外情况是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
文件 ID:%snull 在 com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 在 com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 在 com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest. 执行(AbstractGoogleClientRequest.java:469) 在 com.teamchat.google.sheet.integration.DriveQuickstart.insertFile(DriveQuickstart.java:137) 在 com.teamchat.google.sheet.integration.DriveQuickstart.main(DriveQuickstart.java:110)
这只是一个简单的 java 项目并使用 OAuth。
因此我能够获取文件列表但无法将文件插入 google 驱动器。 谁能告诉我我做错了什么。
"reason" : "insufficientPermissions"
这意味着您在获得授权时设置的范围不允许您在资源上写入。
设置正确的范围https://developers.google.com/drive/web/scopes or https://developers.google.com/resources/api-libraries/documentation/drive/v2/java/latest/com/google/api/services/drive/DriveScopes.html
通常:
private static final List<String> SCOPES =
Arrays.asList(DriveScopes.DRIVE_FILE);
问题出在范围
将此行更改为
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY);
至
private static final List<String> SCOPES = new ArrayList(DriveScopes.all());"
或根据您的 need.Read this
更改范围的值并记得删除令牌文件夹并重新 运行 应用程序。