2016-09-09 9 views
0

Es gibt bereits einige Leute, die Fragen dazu gestellt haben, aber ich war immer noch nicht in der Lage, mein Problem zu lösen.Google Drive 403 Verbotener Fehler

Also, ich habe die Gradle/Java quickstart zum Drucken der Namen und IDs für bis zu 10 Dateien in meinem Google Drive. Das war in Ordnung, aber ich möchte ein Java-Skript schreiben, um Dateien auf mein Laufwerk hochzuladen, habe ich die Hauptfunktion unten in meiner Java-Datei eingefügt.

public class DriveCommandLine { 

/** Application name. */ 
private static final String APPLICATION_NAME = 
     "Drive API Java Quickstart"; 

/** Directory to store user credentials for this application. */ 
private static final java.io.File DATA_STORE_DIR = new java.io.File(
     System.getProperty("user.home"), ".credentials/drive-java-quickstart"); 

/** Global instance of the {@link FileDataStoreFactory}. */ 
private static FileDataStoreFactory DATA_STORE_FACTORY; 

/** Global instance of the JSON factory. */ 
private static final JsonFactory JSON_FACTORY = 
     JacksonFactory.getDefaultInstance(); 

/** Global instance of the HTTP transport. */ 
private static HttpTransport HTTP_TRANSPORT; 

/** Global instance of the scopes required by this quickstart. 
* 
* If modifying these scopes, delete your previously saved credentials 
* at ~/.credentials/drive-java-quickstart 
*/ 
private static final List<String> SCOPES = 
     Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY); 

static { 
    try { 
     HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
     DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
     System.exit(1); 
    } 
} 

/** 
* Creates an authorized Credential object. 
* @return an authorized Credential object. 
* @throws IOException 
*/ 
public static Credential authorize() throws IOException { 
    // Load client secrets. 
    InputStream in = 
      DriveCommandLine.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; 
} 

/** 
* Build and return an authorized Drive client service. 
* @return an authorized Drive client service 
* @throws IOException 
*/ 
public static Drive getDriveService() throws IOException { 
    Credential credential = authorize(); 
    return new Drive.Builder(
      HTTP_TRANSPORT, JSON_FACTORY, credential) 
      .setApplicationName(APPLICATION_NAME) 
      .build(); 
} 

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

    //Insert a file 
    Drive service = getDriveService(); 
    File body = new File(); 
    body.setDescription("A test document"); 
    body.setMimeType("text/plain"); 

    java.io.File fileContent = new java.io.File("D:\\MyFiles\\nkonstantinidis\\Study\\IntelliJ_Shortcuts.txt"); 
    FileContent mediaContent = new FileContent("text/plain", fileContent); 

    File file = service.files().insert(body, mediaContent).execute(); 
    System.out.println("file ID: " + file.getId()); 
} 

}

Und ich erhalte eine Fehlermeldung angezeigt unten, wenn ich es laufen

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
{ 
    "code" : 403, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Insufficient Permission", 
    "reason" : "insufficientPermissions" 
    } ], 
    "message" : "Insufficient Permission" 
} 
     at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146) 
     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
     at DriveCommandLine.main(DriveCommandLine.java:114) 

ich die OAuth-Client-ID erstellt und aktiviert haben, Google Drive, aber dies immer noch tun es Sache .

Könnten Sie mir vielleicht helfen, oder noch besser direkt zum Tutorial für das Hochladen von Dateien auf Google Drive, ich bin ziemlich schlecht in Java, also ertragen Sie mit mir.

Vielen Dank im Voraus.

Antwort

1

Sie müssen SCOPE für die Verbindung (Unzureichende Berechtigungsnachricht) in geeignete

private static final List<String> SCOPES = Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY); 

Von DriveScope.class verwendet ändern:

/** View and manage the files in your Google Drive. */ 
public static final String DRIVE = "https://www.googleapis.com/auth/drive"; 

/** View and manage its own configuration data in your Google Drive. */ 
public static final String DRIVE_APPDATA = "https://www.googleapis.com/auth/drive.appdata"; 

/** View and manage Google Drive files and folders that you have opened or created with this app. */ 
public static final String DRIVE_FILE = "https://www.googleapis.com/auth/drive.file"; 

/** View and manage metadata of files in your Google Drive. */ 
public static final String DRIVE_METADATA = "https://www.googleapis.com/auth/drive.metadata"; 

/** View metadata for files in your Google Drive. */ 
public static final String DRIVE_METADATA_READONLY = "https://www.googleapis.com/auth/drive.metadata.readonly"; 

/** View the photos, videos and albums in your Google Photos. */ 
public static final String DRIVE_PHOTOS_READONLY = "https://www.googleapis.com/auth/drive.photos.readonly"; 

/** View the files in your Google Drive. */ 
public static final String DRIVE_READONLY = "https://www.googleapis.com/auth/drive.readonly"; 

/** Modify your Google Apps Script scripts' behavior. */ 
public static final String DRIVE_SCRIPTS = "https://www.googleapis.com/auth/drive.scripts"; 

Speichern gespeicherten Anmeldeinformationen löschen (durch Anwendung erstellt) nach dem Wechsel SCOPE

+0

Dank einer Million @marekk, ich fühle mich blind, kann nicht glauben, dass ich das nicht gesehen habe, hat es den ganzen Tag untersucht. –

Verwandte Themen