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的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
NodeJS实现同步的方法
Mar 02 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
JavaScript File分段上传
2016/03/10 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
vue项目中用cdn优化的方法
2018/01/03 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
Python进程通信之匿名管道实例讲解
2015/04/11 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
儿童学习python的一些小技巧
2018/05/27 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
python监控nginx端口和进程状态
2019/09/06 Python
python 实现生成均匀分布的点
2019/12/05 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Python celery原理及运行流程解析
2020/06/13 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
出生医学证明书
2014/09/15 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技