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的url截取模块url-extract的使用实例
Nov 18 NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
nodejs入门教程一:概念与用法简介
Apr 24 NodeJs
NodeJS链接MySql数据库的操作方法
Jun 27 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
纯异步nodejs文件夹(目录)复制功能
Sep 03 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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中的unicode和utf8编码
2015/06/10 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JavaScript模拟push
2016/03/06 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
《鸿门宴》教学反思
2014/04/22 职场文书
森林病虫害防治方案
2014/06/02 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
出国留学导师推荐信
2015/03/26 职场文书
销售口号霸气押韵
2015/12/24 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
python实现双向链表原理
2022/05/25 Python
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python