这里有新鲜出炉的 Node.js 教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
本文给大家介绍分享 node 全面解析表单的图片上传,本文给大家介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
node 全面解析表单的图片上传 ,multiparty 解析与内容类型的 HTTP 请求 multipart/form-data,也被称为文件上传。
multiparty 安装
- npm install multiparty
html 代码
- <form action="/api/uppic" method="post" >
- <input type="file" name="pic" >
- <input type="submit">
- </form>
node 代码
- app.route('/api/uppic').post(function(req, res) {
- var multiparty = require('multiparty');
- var form = new multiparty.Form(); //新建表单
- //设置编辑
- form.encoding = 'utf-8';
- //设置图片存储路径
- form.uploadDir = "Uploads/gaoxiao/";
- form.keepExtensions = true; //保留后缀
- form.maxFieldsSize = 2 * 1024 * 1024; //内存大小
- form.maxFilesSize = 5 * 1024 * 1024; //文件字节大小限制,超出会报错err
- //表单解析
- form.parse(req,
- function(err, fields, files) {
- //报错处理
- if (err) {
- console.log(err);
- var u = {
- "error": 1,
- "message": '请上传5M以图片'
- };
- res.end(JSON.stringify(u));
- return false;
- }
- //获取路径
- var oldpath = files.imgFile[0]['path'];
- //文件后缀处理格式
- if (oldpath.indexOf('.jpg') >= 0) {
- var suffix = '.jpg';
- } else if (oldpath.indexOf('.png') >= 0) {
- var suffix = '.png';
- } else if (oldpath.indexOf('.gif') >= 0) {
- var suffix = '.gif';
- } else {
- var u = {
- "error": 1,
- "message": '请上传正确格式'
- };
- res.end(JSON.stringify(u));
- return false;
- }
- var url = 'Uploads/gaoxiao/' + Date.now() + suffix;
- var fs = require('fs');
- //给图片修改名称
- fs.renameSync(oldpath, url);
- var u = {
- "error": 0,
- "url": '/' + url
- }
- res.end(JSON.stringify(u));
- });
- });
multiparty
multiparty.Form 创建一个新的形式 **
encoding:用于输入表单字段集编码。默认为 utf8
maxFieldsSize:限制内存的所有字段(而不是文件)的量可以以字节为单位分配。如果超过该值,一个 error 事件被发射。默认大小为 2MB。
maxFields:限制,将发射一个前解析字段的数目 error 的事件。一个文件算作在这种情况下,一个字段。默认为 1000。
maxFilesSize:上传文件大小限制,只有当相关 autoFiles 的 true。限制接受合并所有文件的总字节数。如果超过该值,一个 error 事件被发射。默认值是无穷大。
autoFields:启用 field 事件和禁用 part 事件的字段。这是自动设置为 true 如果添加了一个 field 侦听器。
uploadDir:只有当相关 autoFiles 的 true。目录放置文件上传。您以后可以使用移动它们 fs.rename()。默认为 os.tmpDir()。
form.parse(req,function(err,fields,files){})
- fields: 是一个对象(上传名称和值),其属性名的字段名称和值是字段值的数组。
- files :是一个对象(上传名称和服务器文件路径),其属性名的字段名称和值是文件对象的数组。
files 内文件对象 file - 具有这些属性的对象:
- fieldName - 同 name - 此文件中的字段名
- originalFilename - 文件名,对于该文件的用户的报告
- path - 在磁盘上载文件的绝对路径
- headers - 这是与该文件一起发送的 HTTP 头
- size - 以字节的文件大小
node 表单解析(multiparty)的 api 地址:https://www.npmjs.com/package/multiparty
以上所述是小编给大家介绍的全面解析 node 表单的图片上传,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 phperz 网站的支持!
来源: http://www.phperz.com/article/17/0510/330337.html