手机版

nodejs实现模拟形式表单上传文件

时间:2021-09-10 来源:互联网 编辑:宝哥软件园 浏览:

以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,所以,用了一天时间把这个方法给搞出来了(觉得花费的时间长了点),分享之。

代码及测试用例:

var http=require(' http ');var path=require(' path ');var fs=require(' fs ');函数postFile(filekyvalue,req){ var boundaryKey=math。random().toString(16);var end data=' \ r \ n-' BoundAryKey '-';定义变量文件=新数组();for(var I=0;I FileKeyValue . LengIti){ var Content=' \ r \ n-' BoundAryKey ' \ r \ n ' ' Content-type :应用程序/八位字节-流\r\n ' '内容-处置:表单-数据;name=\'' fileKeyValue[i].urlKey ' \filename=\ '路径。basename(FileKeyValue[I]).网址值)' \ ' \ r \ n '内容传输编码:二进制\ r \ n \ r \ n ';var contentBinary=新缓冲区(内容,' utf-8 ');//当编码为美国信息交换标准码时,中文会乱码。文件。push({内容二进制:内容二进制,文件路径: filekyvalue[I]).URL值});} var内容长度=0;for(var I=0;我。文件。长度;i ) { var stat=fs.statSync(文件[i].文件路径);contentLength=文件[我]。内容二进制。长度;Content length=stat . size } req . setheader(' Content-Type ',' multipart/form-data;边界=-BoundAryKey);req.setHeader('内容长度',内容长度缓冲区。byte length(end data));//将参数发出var文件索引=0;var DooneFile=function(){ req。写入(文件[文件索引]).content BInary);var fileStream=fs。CreateReadStream(文件[文件索引].filePath,{ bufferSize : 4 * 1024 });fileStream.pipe(req,{ end : false });fileStream.on('end ',function(){ file index;if(文件索引==文件。长度){ req。end(结束数据);} else { DooneFile();} });};if(文件索引==文件。长度){ req。end(结束数据);} else { DooneFile();} }//测试用例//http://nodejs。org/API/http。html # http _ http _ request _ options _ callbackvar files=[{ URL key : ' file 1 ',URL值: ' e : \ \ dfbf。jpg ' },{urlKey: 'file2 ',urlValue: 'E:\\1.jpg'},{urlKey: 'file3 ',URL值: ' e 333330 '空格中文。MP3 ' }]var选项={ host : ' localhost ',port: '8908 ',method: 'POST ',path : '/Home/Upload ' } var req=http。请求(选项,功能(RES){控制台。日志(' RES : ' RES);控制台。日志('状态: ' RES . StatusCode);控制台。日志(' headers : ' JSON。stringify(RES . header));//RES . setencoding(' utf8 ');res.on('data ',function(chunk){ console。日志(' body : '区块);})})req.on('错误,函数{控制台。日志('请求: ' e .消息有问题);控制台。日志(e);})postFile(files,req);控制台。日志(“完成”);服务端测试,用手动音量调节在家控制器写了个上传方法,并遍历上传的文件将其保存在硬盘上了。

只是上传大文件会有问题,估计是需要服务器进行配置,暂且不管。

服务端方法(写在了主页控制器下)

[httpset]公共字符串上传(){//httptedfilebase文件=this .请求文件['文件'];//文件。另存为(文件. FIlename);foreach(字符串文件。请求文件){这个。请求文件[文件]。另存为(@'E:\新建文件夹\ '这个。请求文件[文件]。FileName);}返回@ '保存成功路径:E:\新建文件夹\';}运行脚本:

nodejsPostFile.js节点运行结果:

版权声明:nodejs实现模拟形式表单上传文件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。