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 Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
NodeJS使用jQuery选择器操作DOM
Feb 13 NodeJs
nodejs基础知识
Feb 03 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 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
php实现单链表的实例代码
2013/03/22 PHP
深入分析php之面向对象
2013/05/15 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
2014/08/05 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
python中的yield from语法快速学习
2020/11/06 Python
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
教师队伍管理制度
2014/01/14 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
水知道答案观后感
2015/06/08 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
导游词之介休绵山
2019/12/31 职场文书