2016-06-19 19 views
0

Ich versuche, eine Datei mit FileSaver zu speichern und "technisch" funktioniert es, ich sage "technisch", weil die Datei nicht geöffnet wird.Datei lokal gespeichert, FileSaver wird nicht geöffnet.

es zu testen ich eine völlig neue Datei erstellt, hochgeladen und versuchte, noch herunterladen, wenn ich versuche, die heruntergeladene Datei ich zu öffnen:

enter image description here

ich die Datei von Google Drive herunterladen:

_service.Files.Export(fileId, type).ExecuteAsStream();

Dann konvertiere ich diesen Strom byte []:

using (var ms = new MemoryStream()) 
{ 
    var stream = StorageService.GetStream(file.StorageId); //invoking previous code 

    stream.CopyTo(ms); 
    resource.Content = ms.ToArray(); //saves to view model 
} 

Mein Javascript:

download(fileId: string): void { 
    this.fileStore.download(fileId).then(function (file: StorageFile) { 
    if (file) { 
     let data = new Blob([file.content], { type: file.type }); 
     fileSaver.saveAs(data, file.title); 
    } 
    }); 
} 

Alle Ideen, was mache ich falsch?

Danke!

Antwort

0

Das Problem bezog sich auf die Byte-Array- (String-) Decodierung. Es war base64. Nachdem ich es entschlüsselt hatte, konnte ich es zum Laufen bringen.

von SO Genommen:

let byteCharacters = atob(b64Data); 
let byteArrays = []; 

for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { 
    let slice = byteCharacters.slice(offset, offset + sliceSize); 
    let byteNumbers = new Array(slice.length); 

    for (let i = 0; i < slice.length; i++) { 
    byteNumbers[i] = slice.charCodeAt(i); 
    } 

    let byteArray = new Uint8Array(byteNumbers); 

    byteArrays.push(byteArray); 
} 

let blob = new Blob(byteArrays, { type: contentType });