2016-09-15 1 views
0

Was ich versuche eine binäre Datei (ein .docx in diesem Fall) zu tunNodeJS und jquery - vorbei und Speicher eine Binärdatei

Laden aus dem Browser und auf dem Server speichern. Verwenden von NodeJs/ExpressJS auf dem Server.

Ausgabe

ich erfolgreich Textdateien (.json/.txt/.csv) vom Client zum Server und speichern erfolgreich jedoch passieren kann, scheinen ich es für eine Binärdatei zu tun, nicht in der Lage zu sein. Ich bekomme entweder "keine Konvertierung von Text zu Binär" Fehler mit einer beschädigten Datei ohne Daten drin oder einen internen Fehler.

Client-Seite

Nach der Eingabe-Upload, nenne ich

fRead.readAsArrayBuffer(fName); 

Die $ Schnipsel Aufruf

$.ajax({ 
     url: url, 
     type: 'POST', 
     data: obj, //the obj is the e.target.result from FileReader 
     contentType: 'application/octet-stream', 
     dataType: 'binary', 
     success: function (data) { 
      cbFn(data.msg); 
     }, 
     error: function (xhr, status, error) { 
      alert("error " + status + " " + error); 
     } 
    }); 

Server Side

Auf dem Server ist Seite

fs.writeFile(saveFile, req.body, 'binary', (err) => { 
    if (err) throw err; 
    console.log('file saved to ' + saveFile); 
}); 

nun auf der Server-Seite, wirft der Code über die „keine Umwandlung von Text in binären“ Fehlern wenn es die Datei speichert (beschädigt, keine Daten). Wenn ich es zu

fs.writeFile(saveFile, Buffer.from(req.body), 'binary', (err) => { 
    if (err) throw err; 
    console.log('file saved to ' + saveFile); 
}); 

ändere, erhalte ich nur einen internen Fehler.

An diesem Punkt bin ich ratlos, wo mein Fehler ist - ist es, dass ich die falschen Codierungstypen in meinem $ .ajax Aufruf verwende? Oder meine Optionen in fs.writeFile sind falsch, oder vielleicht sollte ich fs.writeFile überhaupt nicht und etwas anderes verwenden? Ich habe das Gefühl, dass es so viele Möglichkeiten gibt, damit ich ein wenig Hilfe gebrauchen kann.

Auch überrascht, es war ziemlich schwer, einen guten Online-Artikel für diesen Fall zu finden - versuche nur, eine Binärdatei hochzuladen und zu speichern!

Antwort

0

Lest es als Arraybuffer nicht mit dem Filereader, senden Sie einfach das Blob als

ist
var file = new Blob(["321"]) 
$.ajax({ 
    type: 'POST', 
    url: '/upload.php', 
    data: file, 
    processData: false, 
    contentType: false 
}) 
+0

Ich bin nicht sicher, wie Sie die Datei erstellt wurde. Wenn ich das fileReader-Objekt habe, was muss ich tun, um den Inhalt vor dem Senden an den Server zu lesen? Ich habe Ihre Methode oben versucht, indem Sie einfach das 'e' von fileReader.onload = function (e) und auch e.target und e.target.result übergeben. Funktioniert nicht. Der Nodejs-Server zeigt, dass es keine req.body ... – Gerry

+0

screw der FileReader ... ich nehme an, 'fName' ist der Blob, also senden Sie einfach den FName als' Daten' – Endless

Verwandte Themen