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!
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
screw der FileReader ... ich nehme an, 'fName' ist der Blob, also senden Sie einfach den FName als' Daten' – Endless