Eu costumava ter esse método no projeto, mas recentemente havia um problema com o cliente. Meu colega disse que esse método nunca funcionou. Então, e eu levei um dia para divulgar esse método (acho que demorou um pouco mais) e compartilhá -lo.
Casos de código e teste:
var http = requer ('http'); var path = requer ('caminho'); var fs = requer ('fs'); função postFile (fileKeyValue, req) {var bouberyKey = Math.Random (). ToString (16); var enddata = '/r/n ----' + limaryKey + '-'; var arquivos var = new Array (); para (var i = 0; i <FileKeyValue.Length; i ++) {var content = "/r/n ----" + limiteykey + "/r/n" + "type de conteúdo: aplicativo/octeto-stream/r/n" + "content-disposition: form-data; name =/" + filekeyvalue [i]. Path.BaseName (FileKeyValue [i] .urlValue) + "/"/r/n " +" Content-transfer-coding: binário/r/n/r/n "; var contentBinary = novo buffer (conteúdo, 'utf-8'); // Quando a codificação é ASCII, os chineses serão iluminados. files.push ({contentbinary: contentbinary, filepath: fileKeyValue [i] .urlValue}); } var contentLength = 0; for (var i = 0; i <files.length; i ++) {var stat = fs.statsync (arquivos [i] .FilePath); contentLength += arquivos [i] .ContentBinary.Length; contentLength += stat.size; } req.setheader ('content-type', 'multipart/form-dados; limite =-' + limaryKey); req.setheader ('content-length', contentLength + buffer.bytelength (enddata)); // emita o parâmetro var fileIndex = 0; var dooneFile = function () {req.write (arquivos [fileIndex] .ContentBinary); var filestream = fs.creteReadstream (arquivos [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 (); }} // case de teste // http: //nodejs.org/api/http.html#http_http_request_options_callbackvar arquivos = [{urlkey: "file1", urlValue: "e: //dfbf.jpg"} "E: //1.jpg"}, {urlkey: "file3", urlValue: "e: // pro espacial chinês.mp3"}] var options = {host: "localhost", porta: "8908", método: "post", path: "/home/upload"} var req = http.requim (pós ", path:"/upload/upload "} vareq = http.requ res); console.log ('Problema com solicitação:' + e.message); console.log ("feito");Para testes do servidor, use o MVC para gravar um método de upload no controlador doméstico e atravessar o arquivo carregado e salvá -lo no disco rígido.
Só que haverá problemas no upload de arquivos grandes. Estima -se que o servidor precise ser configurado; portanto, não se preocupe com isso por enquanto.
Método do lado do servidor (escreva no controlador doméstico)
[Httppost] public string upload () {// httppotedFileBase file = this.request.files ["file"]; //file.saveas(File.Filename); foreach (arquivo string neste.request.files) {this.request.files [file] .saveas (@"e:/nova pasta/" + this.request.files [file] .filename); } retornar @"Salvar caminho de sucesso: e:/nova pasta/"; }Execute o script:
node nodejspostfile.js
Resultados em execução: