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

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

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

以前項目里有這個方法,最近在客戶那里出問題了,同事說,這個方法從來就沒管用過,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');//當(dāng)編碼為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));

  // 將參數(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();
  }      
}

//測試用例
//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ù)端測試,用mvc在home控制器寫了個upload方法,并遍歷上傳的文件將其保存在硬盤上了。

只是上傳大文件會有問題,估計是需要服務(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:\新建文件夾\";
    }

運行腳本:

node nodejsPostFile.js

運行結(jié)果:

相關(guān)文章

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

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

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

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

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

    node.js使用免費的阿里云ip查詢獲取ip所在地【推薦】

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

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

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

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

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

    你或許不知道的一些npm實用技巧

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

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

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

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

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

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

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

    用C/C++來實現(xiàn) Node.js 的模塊(二)

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

最新評論

泽库县| 敦煌市| 重庆市| 浦县| 郸城县| 宁明县| 南陵县| 手机| 定南县| 博野县| 攀枝花市| 长武县| 平武县| 米泉市| 无极县| 海原县| 龙口市| 安化县| 汉寿县| 沂源县| 深圳市| 犍为县| 沙河市| 临邑县| 瓦房店市| 德惠市| 霍州市| 化德县| 巴中市| 丹阳市| 五原县| 金沙县| 乐山市| 太仆寺旗| 涟水县| 蒙山县| 临江市| 女性| 昌吉市| 神木县| 巢湖市|