Ich versuche, this Leitfaden für wiederaufladbare Uploads auf Google Drive über Google Api zu folgen.Wie lade ich Dateien mit Gapi und fortsetzbaren Uploads auf Google Drive hoch?
Dies ist mein Code, Sie können sehen, dass es zwei Anfragen an den Guide stellt, der erste Teil erstellt die Metadaten und dann verwenden wir den Speicherort für den Upload der Dateien mit der Sitzung, die bei der ersten Anfrage erstellt wurde.
const file = new File(['Hello, world!'], 'hello world.txt', { type: 'text/plain;charset=utf-8' });
const contentType = file.type || 'application/octet-stream';
const reqMetadata = gapi.client.request({
'path': 'upload/drive/v3/files',
'method': 'POST',
'params': { 'uploadType': 'resumable' },
'headers': {
'X-Upload-Content-Type': file.type,
'X-Upload-Content-Length': file.size,
'Content-Type': 'application/json; charset=UTF-8'
},
'body': {
'name': file.name,
'mimeType': contentType,
'Content-Type': contentType,
'Content-Length': file.size
}
});
reqMetadata.execute((respMetadata, rawRespMetadata: any) => {
const locationUrl = JSON.parse(rawRespMetadata).gapiRequest.data.headers.location;
const reader = new FileReader();
reader.onload = (e) => {
const reqFile = gapi.client.request({
'path': locationUrl,
'method': 'PUT',
'headers': {
'Content-Type': file.type,
'Content-Length': file.size
},
'body': reader.result
});
reqFile.execute(respFile => {
console.log(respFile);
});
};
reader.readAsArrayBuffer(file);
});
Was ist das Problem?
Nun, scheint, dass die Google-API-Bibliothek nicht die Datei/Byte-Array auf ihre gapi.client.request als Körper nicht mag und sie Kürzen es weg
Was ist der richtige Weg, um die Datei zu übergeben? Ich habe beide Körper versucht: Datei und Körper: reader.result aber das gleiche Ergebnis
PS: Gapi ist bereits vollständig authentifiziert & mit Auth2 initialisiert, ich bin in der Lage, Dateien/Verzeichnis zu erstellen.
EDIT 1:
gapi Bibliothek gerade ist jsoing die FileArray, deshalb ist die JSON-Funktion es zu einem leeren Objekt ändert, keine Möglichkeit, es .. funktioniert etwas fehlen muss.
EDIT 2:
Ich habe es ohne die GAPI zu arbeiten, es lädt die Datei korrekt, aber ich habe einige Probleme mit der CORS
reader.onload = (e) => {
const authHeader = `Bearer ${this.auth.currentUser.get().getAuthResponse().access_token}`;
const headers = new Headers({
'Authorization': authHeader,
'Content-Type': file.type
});
const options = new RequestOptions({ headers });
const url = locationUrl;
this.http.put(url, reader.result, options).subscribe(res => {
observer.next(res);
}, (err) => {
observer.next({});
});
};
reader.readAsArrayBuffer(file);
Wenn jemand einige Hinweise hat ..
Welche GAPI-Version verwenden Sie? Außerdem scheint das GAPI Sreams zum Hochladen von Ifles in NodeJS zu verwenden. Sie könnten versuchen mit [dies] (https://github.com/dominictarr/browser-stream) –
Sollte die neueste Version sein, wo haben Sie Dokumentation über die Verwendung von Streams (Sockets) gefunden? –
[Hier] (https://developers.google.com/drive/v3/web/manage-uploads), sehen Sie sich die NodeJS-Beispiele an. –