Früher hatte ich diese Methode im Projekt, aber in letzter Zeit gab es ein Problem mit dem Kunden. Mein Kollege sagte, dass diese Methode nie funktioniert habe. Also, und ich habe mir einen Tag genommen, um diese Methode herauszuholen (ich denke, es hat etwas länger gedauert) und sie zu teilen.
Code und Testfälle:
var http = required ('http'); var path = require ('path'); var fs = required ('fs'); Funktion postfile (FileKeyValue, Req) {var bloßKeyKey = math.random (). toString (16); var enddata = '/r/n ----' + bloßKey + '-'; var files = new array (); für (var i = 0; i <filekeyValue.length; i ++) {var content = "/r/n ----" + bloßKey + "/r/n" + "Content-type: Anwendung/Oktett-Stream/R/N" + "Content-Disposition: Form-Data; name =/" + FileKeyValue [i]. path.basename (FileKeyValue [i] .urlValue) + "/"/r/n " +" Inhaltsübertragung: Binär/r/r/n "; var contentbinary = neuer Puffer (Inhalt, 'UTF-8'); // Bei der Codierung ist ASCII, Chinesisch wird verstümmelt. Dateien.push ({contentBinary: contentBinary, filepath: FileKeyValue [i] .urlValue}); } var contentLength = 0; für (var i = 0; i <files.length; i ++) {var stat = fs.StatSync (Dateien [i] .FilePath); ContentLength += Dateien [i] .ContentBinary.Length; contentLength += stat.Size; } req.setheader ('content-type', 'multipart/form-data; boundary =-' + bloßKey); req.setheader ('content-Length', contentLength + buffer.ByTelength (enddata)); // Die Parameter var FileIndex = 0 ausgeben; var doOneFile = function () {req.write (Dateien [FileIndex] .ContentBinary); var fileStream = fs.createadStream (Dateien [FileIndex] .filePath, {bufferSize: 4 * 1024}); fileStream.pipe (req, {end: false}); fileStream.on ('end', function () {fileIndex ++; if (fileIndex == files.length) {req.end (enddata);} else {doOneFile ();}}); }; if (FileIndex == Dateien.length) {req.end (enddata); } else {doOneFile (); } }//Test case//http://nodejs.org/api/http.html#http_http_request_options_callbackvar files = [ {urlKey: "file1", urlValue: "E://DFBF.jpg"}, {urlKey: "file2", urlValue: "E: //1.jpg"}, {urlkey: "file3", urlvalue: "e: // pro space chinesische res); console.log ('Problem mit Anfrage:' + E.Message); console.log ("fone");Verwenden Sie für Server -Tests MVC, um eine Upload -Methode auf den Heimcontroller zu schreiben, die hochgeladene Datei durchzuführen und auf der Festplatte zu speichern.
Es ist nur so, dass es Probleme beim Hochladen großer Dateien geben wird. Es wird geschätzt, dass der Server konfiguriert werden muss. Machen Sie sich also vorerst keine Sorgen.
Serverseitige Methode (unter Home Controller schreiben)
[Httppost] public string upload () {// httppostedDFileBase -Datei = this.request.files ["Datei"]; //file.saveas(file.filename); foreach (String -Datei in dieser } return @"Erfolgspfad speichern: e:/neuer Ordner/"; }Führen Sie das Skript aus:
node nodejspostfile.js
Auslaufergebnisse: