Ich habe Probleme beim Hochladen meiner Dateien mit Google Drive API. Die API gibt keinen Fehler zurück und zeigt an, als ob die Datei erfolgreich hochgeladen wurde. Wenn ich jedoch versuche, eine Liste der Dateien abzurufen, wird sie nicht angezeigt und erscheint auch nicht, wenn ich versuche, die Google Drive-API-Seite aufzurufen.Die hochgeladene Datei wird nicht angezeigt, wenn Google Drive API verwendet wird
Hier sind einige Beobachtungen:
- ich bereits überprüft haben, ob der Pfad auf Java existiert oder nicht, und es existiert nicht.
- Die Datei wurde erfolgreich hochgeladen, da sie eine ID zurückgibt, die Fortschrittsrate bei 1,0 liegt und kein Nachrichtenfehler vorliegt.
- Das SCOPE, das ich verwende, ist der globale Bereich des Laufwerks und nicht der Dateibereich. "https://www.googleapis.com/auth/drive"
- Die Abfrage wird erfolgreich auf der Konsolenentwicklerseite von Google angezeigt.
- Ich habe bereits versucht, es mit root als Ordner zu erstellen, anstatt einen Ordner zu erstellen.
- Die Version auf diesem Projekt des Api ist „v3-rev90-1.23.0“
Hier ist, wie mein Code aussieht (ich habe versucht, es basiert auf dem Java-Snippet zu erstellen).
public class Quickstart {
/** Application name. */
private static final String APPLICATION_NAME = "Drive API Java Quickstart";
/** Directory to store user credentials for this application. */
/** 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);
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
} 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 {
GoogleCredential credential = GoogleCredential.fromStream(Quickstart.class.getResourceAsStream("/secret.json"));
credential = credential.createScoped(SCOPES);
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 String generateFolder(Drive service) throws IOException {
File fileMetadata = new File();
fileMetadata.setName("Invoices");
fileMetadata.setMimeType("application/vnd.google-apps.folder");
File file = service.files().create(fileMetadata).setFields("id").execute();
System.out.println("Folder ID: " + file.getId());
return file.getId();
}
public static void uploadFile(Create createFile, Drive service) throws IOException, InterruptedException {
File file = createFile.execute();
Thread.sleep(3000);
MediaHttpUploader uploader = createFile.getMediaHttpUploader();
System.out.println(uploader.getProgress());
System.out.println("File ID: " + file.getId());
System.out.println(service.files().list());
}
public static Create createFile(String path, Drive service) throws IOException {
String folderId = generateFolder(service);
File fileMetadata = new File();
fileMetadata.setName("photo.jpg");
fileMetadata.setParents(Collections.singletonList(folderId));
java.io.File filePath = new java.io.File(path);
FileContent mediaContent = new FileContent("image/jpeg", filePath);
Create createFile = service.files().create(fileMetadata, mediaContent).setFields("id, parents");
return createFile;
}
public static void main(String[] args) throws IOException, InterruptedException {
Drive service = getDriveService();
String path = "F:/workspace/drive/files/photo.jpg";
Create createdFile = createFile(path, service);
uploadFile(createdFile, service);
}
}
Das Ergebnis dieses Codes ist:
ID Folder: "String des Ordners ID"
1.0
Datei-ID: "String der Datei-ID"
{}
(wobei { } sollten alle Dateien auf dem Laufwerk vorhanden sein)
Jeder hat eine Idee, warum es nicht auf der Festplatte erscheint?
createFile sollte die Dateiressource enthalten, die eine Datei-ID enthalten sollte, wenn sie tatsächlich erstellt wurde. Sind Sie sicher, dass Sie das Google Drive-Konto des Benutzers überprüfen, mit dem Sie Ihre Anwendung authentifiziert haben? Sie können eine files.list machen, um zu überprüfen, welche Dateien sich gerade auf Google Drive befinden, dann können Sie zumindest sicher sein, dass Sie sich mit demselben Benutzer authentifizieren. – DaImTo
Ja, createFile enthält die Datei-ID der erstellten Datei. Und es gibt es gedruckt auf "System.out.println (" File ID: "+ file.getId());". Und ja, ich bin mir sicher, dass ich das richtige Konto einchecke, ich habe es doppelt überprüft. –
Gibt es eine Chance, dass Sie ein Dienstkonto für die Authentifizierung verwenden? – DaImTo