NodeJS使用formidable实现文件上传


Posted in NodeJs onOctober 27, 2016

最近自学了一下NodeJS,然后做了一个小demo,实现歌曲的添加、修改、播放和删除的功能,其中自然要实现音乐和图片的上传功能。于是上网查找资料,找到了一个formidable插件,该插件可以很好的实现文件的上传功能。该小demo用到了MySQL数据库,所有的数据都存放到了数据库中。下面简单说一些如何使用。

1.创建app.js主文件

const express = require('express');
const router = require('./router');
const path = require('path');
const bodyParser = require('body-parser');

const app = express();

//静态资源服务
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')));

//配置模板引擎
app.set('views', path.join(__dirname, 'views'));
app.engine('.html', require('ejs').renderFile);
app.set('view engine', 'html');

//配置解析普通表单post请求体
app.use(bodyParser.urlencoded({extended:false}));

//加载路由系统
app.use(router);

app.listen(3000, '127.0.0.1', () => {
  console.log('server is running at port 3000.');
})

2.html文件中的form表单
add.html文件:

<form action="/add" method="post" enctype="multipart/form-data"> 
   <div class="form-group">
    <label for="title">标题</label>
    <input type="text" class="form-control" id="title" name="title" placeholder="请输入音乐标题">
   </div>
   <div class="form-group">
    <label for="artist">歌手</label>
    <input type="text" class="form-control" id="singer" name="singer" placeholder="请输入歌手名称">
   </div>
   <div class="form-group">
    <label for="music_file">音乐</label>
    <input type="file" id="music" name="music" accept="audio/*">
    <p class="help-block">请选择要上传的音乐文件.</p>
   </div>
   <div class="form-group">
    <label for="image_file">海报</label>
    <input type="file" id="poster" name="img" accept="image/*">
    <p class="help-block">请选择要上传的音乐海报.</p>
   </div>
   <button type="submit" class="btn btn-success">点击添加</button>
  </form>

注意:method="post" enctype="multipart/form-data"

3.创建路由router.js文件

const express = require('express');
const router = express.Router();
const handler = require('./handler');
 
router
  .get('/', handler.showIndex)
  .get('/musicList', handler.getMusicList)
  .get('/add', handler.showAdd)
  .post('/add', handler.doAdd)
  .get('/edit', handler.showEdit)
  .post('/edit', handler.doEdit)
  .get('/remove', handler.doRemove)
 
module.exports = router;

注意:router.js文件中的依赖不用多说。

4.创建handler.js文件

const formidable = require('formidable');
const config = require('./config');
const db = require('./common/db');
const path = require('path');
const fs = require('fs');
exports.doAdd = (req, res) => {
  const form = new formidable.IncomingForm();
  form.uploadDir = config.uploadDir;//上传文件的保存路径
  form.keepExtensions = true;//保存扩展名
  form.maxFieldsSize = 20 * 1024 * 1024;//上传文件的最大大小
  form.parse(req, (err, fields, files) => {
    if (err) {
      throw err;
    }
    const title = fields.title;
    const singer = fields.singer;
    const music = path.basename(files.music.path);
    const img = path.basename(files.img.path);
    db.query('INSERT INTO music (title,singer,music,img) VALUES (?,?,?,?)', [
      title,
      singer,
      music,
      img
    ], (err, rows) => {
      if (err) {
        throw err;
      }
      res.redirect('/');
    })
  })
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
nodejs简单实现操作arduino
Sep 25 #NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 #NodeJs
nodejs微信公众号支付开发
Sep 19 #NodeJs
nodeJs内存泄漏问题详解
Sep 05 #NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 #NodeJs
NodeJS远程代码执行
Aug 28 #NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 #NodeJs
You might like
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php获取excel文件数据
2017/04/21 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
JavaScript实现分页效果
2017/03/28 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
Python算法之图的遍历
2017/11/16 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python实现图片上添加图片
2019/11/26 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
小学毕业感言150字
2014/02/05 职场文书
委托书的写法
2014/08/30 职场文书
团队会宣传标语
2014/10/09 职场文书
出纳岗位职责
2015/01/31 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android