J'avais cette méthode dans le projet, mais récemment, il y avait un problème avec le client. Mon collègue a dit que cette méthode n'avait jamais fonctionné. Donc, et j'ai pris une journée pour sortir cette méthode (je pense que cela a pris un peu plus de temps) et le partager.
Code et cas de test:
var http = require ('http'); var path = require ('path'); var fs = require ('fs'); function postfile (fileKeyValue, req) {var boundaryKey = math.random (). toString (16); var endData = '/ r / n ----' + limiteKey + '-'; var files = new Array (); pour (var i = 0; i <fileKeyValue.length; i ++) {var contenu = "/ r / n ----" + boundaryKey + "/ r / n" + "contenu-type: application / octet-stream / r / n" + "contenu-disposition: form-data; name = /" "+ filekeyvalue [i] .urlkey +" / "; filenne) path.basename (fileKeyValue [i] .urlvalue) + "/" / r / n "+" Content-transfer-coding: binary / r / n / r / n "; var contentBinary = nouveau tampon (contenu, 'utf-8'); // Lorsque le codage est ASCII, le chinois sera brouillé. files.push ({contentBinary: contentBinary, filepath: fileKeyValue [i] .urlValue}); } var contentLength = 0; for (var i = 0; i <files.length; i ++) {var stat = fsatSync (files [i] .FilePath); ContentLength + = Files [i] .ContentBinary.Length; contentLength + = stat.size; } req.sethEader ('Content-Type', 'multipart / form-data; boundary = -' + boundaryKey); req.sethEader ('Content-Length', contentLength + buffer.ByteLength (endData)); // émettez le paramètre var fileIndex = 0; var doOneFile = function () {req.write (files [fileIndex] .ContentBinary); var FileStream = fs.creareAdStream (fichiers [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 == files.length) {req.end (endData); } else {doOneFile (); }} // Test Case // http: //nodejs.org/api/http.httml#http_http_request_options_callbackvar files = [{urlke "E: //1.jpg"}, {urlkey: "file3", urlvalue: "e: // pro space chinois.mp3"}] var options = {host: "localhost", port: "8908", méthode: "post", path: "/ home / upload"} var req = http.request (options, fonction (res) {console.Log (http.request (options, fonction (res) {console.Log (http.request (options, fonction (res) {console.Log (HTTP.Request (Options, fonction (res) {console.Log (HTTP.Request (Options, fonction (Res) {ConsoLlo Res); console.log ('Problème avec demande:' + e.Message); console.log ("fait");Pour les tests de serveur, utilisez MVC pour écrire une méthode de téléchargement sur le contrôleur d'accueil et traversez le fichier téléchargé et enregistrez-le sur le disque dur.
C'est juste qu'il y aura des problèmes avec le téléchargement de fichiers volumineux. On estime que le serveur doit être configuré, alors ne vous inquiétez pas pour l'instant.
Méthode côté serveur (Écrivez sous le contrôleur domestique)
[Httppost] public String upload () {// httpPostedFileBase file = this.request.files ["fichier"]; //file.saveas(file.filename); foreach (file de chaîne dans this.request.files) {this.request.files [file] .saveas (@ "e: / new Folder /" + this.request.files [fichier] .FileName); } return @ "Save Success Path: e: / nouveau dossier /"; }Exécutez le script:
nœud nodejSpostfile.js
Résultats en cours: