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 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
NodeJS与Mysql的交互示例代码
Aug 18 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 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与XML的PDF文档生成技术
2006/10/09 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
javascript String 对象
2008/04/25 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
js计算精度问题小结
2013/04/22 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python try except 捕获所有异常的实例
2018/10/18 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
基层党员对照检查材料
2014/09/24 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
单位提档介绍信
2015/10/22 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
Golang: 内建容器的用法
2021/05/05 Golang
python数字图像处理之图像的批量处理
2022/06/28 Python