国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

nodejs 實(shí)現(xiàn)模擬form表單上傳文件

2019-11-20 14:21:27
字體:
供稿:網(wǎng)友

以前項(xiàng)目里有這個(gè)方法,最近在客戶那里出問題了,同事說,這個(gè)方法從來就沒管用過,SO,用了一天時(shí)間把這個(gè)方法給搞出來了(覺得花費(fèi)的時(shí)間長了點(diǎn)),分享之。

代碼及測(cè)試用例:

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');//當(dāng)編碼為ascii時(shí),中文會(huì)亂碼。   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));  // 將參數(shù)發(fā)出  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();  }      }//測(cè)試用例//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 空格 中文.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");

服務(wù)端測(cè)試,用mvc在home控制器寫了個(gè)upload方法,并遍歷上傳的文件將其保存在硬盤上了。

只是上傳大文件會(huì)有問題,估計(jì)是需要服務(wù)器進(jìn)行配置,暫且不管。

服務(wù)端方法(寫在了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:/新建文件夾/";    }

運(yùn)行腳本:

node nodejsPostFile.js

運(yùn)行結(jié)果:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陆丰市| 龙川县| 牟定县| 崇仁县| 阿尔山市| 兴宁市| 霍州市| 邵阳市| 忻城县| 封丘县| 淮阳县| 抚宁县| 泰安市| 泰兴市| 佛山市| 旌德县| 沧州市| 新巴尔虎左旗| 永川市| 龙州县| 阿克| 乳源| 中牟县| 灯塔市| 济南市| 黑山县| 永安市| 文山县| 沾化县| 泽普县| 临汾市| 昭通市| 镇平县| 泸州市| 汉源县| 绥德县| 永宁县| 华容县| 呼图壁县| 青海省| 界首市|