以前はこの方法をプロジェクトに持っていましたが、最近ではクライアントに問題がありました。私の同僚は、この方法が機能したことがないと言った。それで、私はこの方法を出して(もう少し時間がかかったと思います)、共有するのに1日かかりました。
コードおよびテストケース:
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 ----' + boundarykey + ' - '; var files = new Array(); for(var i = 0; i <filekeyvalue.length; i ++){var content = "/r/n ----" + boundarykey + "/r/n" + "content-type:application/octet-stream/r/n" + "content-disposition:form-data; name =/" " + filename =/"/"/"; " path.basename(filekeyValue [i] .urlvalue) + "/"/r/n " +" content-transfer-encoding:binary/r/n/r/n "; var contentbinary = new Buffer(content、 'utf-8'); //エンコーディングがASCIIである場合、中国語は文字化けします。 files.push({contentbinary:contentbinary、filepath:fileKeyValue [i] .urlvalue}); } var contentlength = 0; for(var i = 0; i <files.length; i ++){var stat = fs.statsync(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)); //パラメーターvar fileindex = 0を発行します。 var doonefile = function(){req.write(files [fileindex] .contentbinary); var fileStream = fs.createreadStream(files [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(); }} //テストケース// http://nodejs.org/api/http.html#http_http_request_options_callbackvar files = [{urlkey: "file1"、urlvalue: "" e://dfbf.jpg "} "e://1.jpg"}、{urlkey: "file3"、urlvalue: "e:// pro space mishnion.mp3"}] var options = {host: "localhost"、 "8908"、メソッド: "post"、path: "/home/upload"} var req = http.request(res: "sed(" res) res.log( ' + res.statuscode); console.log( 'リクエストの問題:' + e.message); console.log( "done");サーバーテストには、MVCを使用してホームコントローラーにアップロードメソッドを書き込み、アップロードされたファイルをトラバースしてハードディスクに保存します。
大きなファイルのアップロードに問題があるだけです。サーバーを構成する必要があると推定されているため、今のところ心配しないでください。
サーバー側の方法(ホームコントローラーの下に書く)
[httppost] public string upload(){// httppostedfilebase file = this.request.files ["file"]; //file.saveas(file.filename); foreach(this.request.files){this.request.files [file] .saveas(@"e:/new folder/" + this.request.files [file] .filename); } return @"Save Success Path:e:/new Folder/"; }スクリプトを実行します:
node nodejspostfile.js
実行結果: