以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的时间长了点),分享之。
代码及测试用例:
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=\"" + fileKeyValue[i].urlKey + "\"; 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_callback var files = [ {urlKey: "file1", urlValue: "E:\\DFBF.jpg"}, {urlKey: "file2", urlValue: "E:\\1.jpg"}, {urlKey: "file3", urlValue: "E:\\Pro 空格 中文.mp3"} ] var options = { host: "localhost", port: "8908" , method: "POST", path: "/Home/Upload" } var req = http.request(options, function(res){ console.log("RES:" + res); console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); //res.setEncoding("utf8"); res.on("data", function(chunk){ console.log("BODY:" + chunk); }) }) req.on('error', function(e){ console.log('problem with request:' + e.message); console.log(e); }) postFile(files, req); console.log("done");
服务端测试,用mvc在home控制器写了个upload方法,并遍历上传的文件将其保存在硬盘上了。
只是上传大文件会有问题,估计是需要服务器进行配置,暂且不管。
服务端方法(写在了Home控制器下)
[HttpPost] public string Upload() { //HttpPostedFileBase file = this.Request.Files["file"]; //file.SaveAs(file.FileName); foreach (string file in this.Request.Files) { this.Request.Files[file].SaveAs(@"E:\新建文件夹\" + this.Request.Files[file].FileName); } return @"保存成功 路径:E:\新建文件夹\"; }
运行脚本:
node nodejsPostFile.js
运行结果:
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月20日
2024年11月20日
- 柏菲·珞叔作品集《金色大厅2》限量开盘母带ORMCD[低速原抓WAV+CUE]
- Gareth.T《sad songs(Explicit)》[320K/MP3][29.03MB]
- Gareth.T《sad songs(Explicit)》[FLAC/分轨][152.85MB]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[320K/MP3][63.06MB]
- 龚玥《金装龚玥HQCD》头版限量[WAV分轨]
- 李小春《吻别》萨克斯演奏经典[原抓WAV+CUE]
- 齐秦《辉煌30年24K珍藏版》2CD[WAV+CUE]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[FLAC/分轨][321.47MB]
- 群星 《世界经典汽车音乐》 [WAV分轨][1G]
- 冷漠.2011 《冷漠的爱DSD》[WAV+CUE][1.2G]
- 陈明《流金岁月精逊【中唱】【WAV+CUE】
- 群星《Jazz-Ladies1-2爵士女伶1-2》HQCD/2CD[原抓WAV+CUE]
- 群星《美女私房歌》(黑胶)[WAV分轨]
- 郑源.2009《试音天碟》24BIT-96KHZ[WAV+CUE][1.2G]
- 飞利浦试音碟 《环球群星监听录》SACD香港版[WAV+CUE][1.1G]