最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年07月14日 09:42:52   投稿:hebedich  
使用nodejs來(lái)模擬form表單進(jìn)行文件上傳,可以同時(shí)上傳多個(gè)文件。

以前項(xiàng)目里有這個(gè)方法,最近在客戶(hù)那里出問(wèn)題了,同事說(shuō),這個(gè)方法從來(lái)就沒(méi)管用過(guò),SO,用了一天時(shí)間把這個(gè)方法給搞出來(lái)了(覺(jué)得花費(fèi)的時(shí)間長(zhǎng)了點(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_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");

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

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

服務(wù)端方法(寫(xiě)在了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é)果:

相關(guān)文章

  • 使用Node.js創(chuàng)建HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問(wèn)本地Server的步驟

    使用Node.js創(chuàng)建HTTP服務(wù)器并實(shí)現(xiàn)公網(wǎng)訪問(wèn)本地Server的步驟

    Node.js含有一系列內(nèi)置模塊,使得程序可以脫離 Apache HTTP Server 或 IIS,作為獨(dú)立服務(wù)器運(yùn),下面將介紹如何簡(jiǎn)單幾步實(shí)現(xiàn)遠(yuǎn)程公共網(wǎng)絡(luò)下訪問(wèn)windwos node.js的服務(wù)端,感興趣的朋友一起看看吧
    2023-11-11
  • 利用node.js搭建簡(jiǎn)單web服務(wù)器的方法教程

    利用node.js搭建簡(jiǎn)單web服務(wù)器的方法教程

    本文主題是使用node來(lái)搭建最簡(jiǎn)單的web服務(wù)器,其后可以自己根據(jù)需要深入了解,目前在開(kāi)發(fā)過(guò)程中可以用來(lái)模擬與服務(wù)器進(jìn)行簡(jiǎn)單的交互,比如返回的資源控制等。需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-02-02
  • node.js使用免費(fèi)的阿里云ip查詢(xún)獲取ip所在地【推薦】

    node.js使用免費(fèi)的阿里云ip查詢(xún)獲取ip所在地【推薦】

    這篇文章主要介紹了node.js使用免費(fèi)的阿里云ip查詢(xún)獲取ip所在地的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • 三分鐘教會(huì)你用nodejs操作mysql數(shù)據(jù)庫(kù)

    三分鐘教會(huì)你用nodejs操作mysql數(shù)據(jù)庫(kù)

    MySQL數(shù)據(jù)庫(kù)作為最流行的開(kāi)源數(shù)據(jù)庫(kù),基本上是每個(gè)web開(kāi)發(fā)者必須要掌握的數(shù)據(jù)庫(kù)程序之一了,基本使用?node.js上,最受歡迎的mysql包就是mysql模塊,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)三分鐘教會(huì)你用nodejs操作mysql數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2023-05-05
  • 最流行的Node.js精簡(jiǎn)型和全棧型開(kāi)發(fā)框架介紹

    最流行的Node.js精簡(jiǎn)型和全棧型開(kāi)發(fā)框架介紹

    這篇文章主要介紹了最流行的Node.js精簡(jiǎn)型和全棧型開(kāi)發(fā)框架介紹,本文講解了Express.js、KOA、Total.js、Sails.js、Meteor、Mean.IO等框架,需要的朋友可以參考下
    2015-02-02
  • 你或許不知道的一些npm實(shí)用技巧

    你或許不知道的一些npm實(shí)用技巧

    這篇文章主要給大家介紹了一些你或許不知道的npm實(shí)用技巧,分享一些 npm 包管理工具的實(shí)用小竅門(mén),希望能夠略微提高下前端、Node.js 開(kāi)發(fā)者的生活質(zhì)量,需要的朋友可以參考下
    2019-07-07
  • node.js中使用socket.io的方法

    node.js中使用socket.io的方法

    這篇文章主要介紹了node.js中使用socket.io的方法,需要的朋友可以參考下
    2014-12-12
  • webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程記錄

    webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程記錄

    webpack在前端工程領(lǐng)域起到了中流砥柱的作用,理解它的內(nèi)部實(shí)現(xiàn)機(jī)制會(huì)對(duì)你的工程建設(shè)提供很大的幫助(不論是定制功能還是優(yōu)化打包),下面這篇文章主要給大家介紹了關(guān)于webpack創(chuàng)建項(xiàng)目并打包的詳細(xì)流程,需要的朋友可以參考下
    2023-03-03
  • 快速刪除 node_modules 目錄的集中方法(多種方法)

    快速刪除 node_modules 目錄的集中方法(多種方法)

    本文介紹了三種快速刪除node_modules目錄的方法:使用rimraf工具、通過(guò)npx運(yùn)行rimraf以及在Windows命令提示符中使用del命令,每種方法都適合不同的操作系統(tǒng)和使用場(chǎng)景
    2024-11-11
  • 用C/C++來(lái)實(shí)現(xiàn) Node.js 的模塊(二)

    用C/C++來(lái)實(shí)現(xiàn) Node.js 的模塊(二)

    上篇文章的主要內(nèi)容講訴了用C/C++來(lái)實(shí)現(xiàn) Node.js 的模塊,本文更深一步繼續(xù)探討這個(gè)問(wèn)題,有需要的朋友可以參考下
    2014-09-09

最新評(píng)論

高安市| 大港区| 科尔| 平江县| 诏安县| 平顶山市| 印江| 资源县| 沿河| 张掖市| 厦门市| 长宁县| 藁城市| 松滋市| 正阳县| 桂平市| 黄平县| 阳春市| 江西省| 无锡市| 石家庄市| 呼和浩特市| 札达县| 璧山县| 德庆县| 突泉县| 虎林市| 太仆寺旗| 南漳县| 修武县| 克拉玛依市| 禹州市| 柏乡县| 旬阳县| 常山县| 尖扎县| 忻州市| 罗平县| 镇沅| 六盘水市| 富平县|