我的编程空间,编程开发者的网络收藏夹
学习永远不晚

nodejs 实现模拟form表单上传文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

nodejs 实现模拟form表单上传文件

以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,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 = 'rn----' + boundaryKey + '--';

  var files = new Array();
  for (var i = 0; i < fileKeyValue.length; i++) {
   var content = "rn----" + boundaryKey + "rn" + "Content-Type: application/octet-streamrn" + "Content-Disposition: form-data; name="" + fileKeyValue[i].urlKey + ""; filename="" + path.basename(fileKeyValue[i].urlValue) + ""rn" + "Content-Transfer-Encoding: binaryrnrn";
   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

运行结果:

查看图片

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

nodejs 实现模拟form表单上传文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

nodejs 实现模拟form表单上传文件

以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的时间长了点),分享之。 代码及测试用例:var http = require('http'); var path
2022-06-04

如何使用 Golang 实现 Form 表单文件上传?

go 语言使用 form 表单实现文件上传包括以下步骤:在 html 中设置 enctype="multipart/form-data" 属性,创建表单。在 go 中使用 r.parsemultipartform() 处理表单请求。使用 r
如何使用 Golang 实现 Form 表单文件上传?
2024-05-13

Linux中如何以form表单形式上传文件

这篇文章给大家分享的是有关Linux中如何以form表单形式上传文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先cd到要上传文件的目录下:root@iZ2zee1przeygbuu4rkwvxZ:/usr/l
2023-06-12

nodejs如何实现简单的文件上传功能

这篇文章主要为大家展示了“nodejs如何实现简单的文件上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodejs如何实现简单的文件上传功能”这篇文章吧。首先需要大家看一下目录结构,然后
2023-06-29

java form-data上传文件怎么实现

在Java中,可以使用Apache HttpClient库来实现form-data形式的文件上传。下面是一个简单的示例代码:import org.apache.http.HttpEntity;import org.apache.http
java form-data上传文件怎么实现
2023-10-30

javascript怎么构造可以上传文件的form表单

这篇文章主要介绍“javascript怎么构造可以上传文件的form表单”,在日常操作中,相信很多人在javascript怎么构造可以上传文件的form表单问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jav
2023-06-03

NodeJS使用formidable实现文件上传

最近自学了一下NodeJS,然后做了一个小demo,实现歌曲的添加、修改、播放和删除的功能,其中自然要实现音乐和图片的上传功能。于是上网查找资料,找到了一个formidable插件,该插件可以很好的实现文件的上传功能。该小demo用到了My
2022-06-04

Ajax和form+iframe怎么实现文件上传

这篇文章将为大家详细讲解有关Ajax和form+iframe怎么实现文件上传,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTML5Ajax上传html5的上传实现,是需要file控件以及XMLHttpR
2023-06-08

Ant Design_Form表单上传文件组件如何实现

本文小编为大家详细介绍“Ant Design_Form表单上传文件组件如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Ant Design_Form表单上传文件组件如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
2023-07-05

Ant Design_Form表单上传文件组件实现详解

这篇文章主要为大家介绍了Ant Design_Form表单上传文件组件实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-07

nodejs multer实现文件上传与下载

本文实例为大家分享了nodejs实现文件上传下载的具体代码,供大家参考,具体内容如下 1.介绍 做了一个关于文件上传和下载的demo ,选择了Multer 作为中间件进行数据处理。 关于multer请参考中文翻译文档 https://git
2022-06-04

简单实现Android文件上传

文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的。下面是一个模拟网站程序上传文件的例子。 首先新建一个Android工程,新建主启动Activity: MainAc
2022-06-06

编程热搜

目录