2016-05-04 7 views
0

Ich folge this und ich möchte jede Art von Datei auf OneDrive hochladen. Es besagt, dass es einen Puffer für den Dateiinhalt akzeptiert, aber mein folgender Code scheint bei keinem Dateityp zu funktionieren. Die Datei wird hochgeladen, aber sie kann nicht geöffnet werden, so dass der Inhalt sicher durcheinander ist.Wie lade ich eine Datei mit MS Graph API hoch?

Mit der folgenden Methode versuche ich, den Körper Inhalt zu bekommen, so dass ich sie mit der Anfrage senden kann.

private fileToBuffer(file: File): Observable<any> { 
    return Observable.create(observer => { 
     var arrayBuffer; 
     var fileReader = new FileReader(); 
     fileReader.onload = function() { 
      arrayBuffer = this.result; 
      observer.next(arrayBuffer); 
      observer.complete(); 
     }; 
     fileReader.readAsArrayBuffer(file); 
    }); 
} 
+1

Hallo Ibrahim, versuchen Sie, eine Netzwerkerfassung des Uploads mit einem Tool wie Fiddler zu erhalten, und sehen Sie, ob der hochgeladene Inhalt entspricht, was Sie erwarten. Es hört sich so an, als ob Sie die kodierte Datei hochladen, und der Server speichert sie möglicherweise unverpackt, ohne sie so zu dekodieren, wie es von Ihrer Upload-Komponente erwartet wird. – daspek

+0

@daspek Ein Beispiel für die Verwendung der Upload-API von OneDrive wäre sehr hilfreich. Ich kann keine Probe online finden und die Dokumentation ist nicht ausreichend. – lbrahim

Antwort

2

Ich habe nicht bemerkt, dass die http's PUT des Angular 2's den Körper als String genommen hat. Also benutzte ich XHR, um eine Datei mit ihrem Inhalt hochzuladen.

var oReq = new XMLHttpRequest(); 
oReq.open("PUT", url, true); 
oReq.setRequestHeader("Content-Type", "text/plain"); 
oReq.onload = function(e){ 
    console.log('done'); 
}; 
oReq.send(arrayBuffer);