NodeJS使用formidable实现文件上传

  最近自学了一下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');

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏拂晓风起

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

2472
来自专栏web编程技术分享

列举两个前端开发中的“灵异事件”0102

3385
来自专栏帘卷西风的专栏

关于cocos2dx程序的BUG调试解决方案

      今天说一下手机游戏开发的调试问题吧。不得不说的是和PC平台游戏、软件开发相比,手机上开发游戏和软件要困难的多。原因是多方面的,比如说开发环境比较复杂...

972
来自专栏落影的专栏

iOS开发笔记(五)

前言 社会的模式很多是重复的,当你做一样事情很擅长时,与之类似的事情也能触类旁通。 正文 Code开发 1、delegate的trick 很多人习惯在调用de...

4984
来自专栏沈唁志

如何在Ubuntu 16.04上安装PrestaShop

如果您曾经考虑过开设在线商店,您可能会感受到各种免费的开源电子商务解决方案。虽然有这么多的选择意味着几乎可以肯定有一个可用的有效解决方案适合您的特定情况,但它也...

3223
来自专栏idealclover的填坑日常

从零开始折腾博客(2):LMAP搭建Wordpress博客

上面安装的只是MySQL的支持组件,其中的MySQL的系统默认使用的是MariaDB。具体的原因MySQL因为被Oracle收购,有潜在的闭源可能性。为了防止意...

2022
来自专栏刺客博客

Linux使用指定用户运行程序

其实关于降权运行,也就这么一句: su - user -c "xxxxxx",也没必要写一篇文章来解释,但是出于安全考虑,以及对之前出现的aria2权限过高的问...

9093
来自专栏Coco的专栏

【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

2488
来自专栏Java3y

纳税服务系统总结

纳税服务系统总结 纳税服务系统是我第一个做得比较大的项目(不同于javaWeb小项目),该项目系统来源于传智Java32期,十天的视频课程(想要视频的同学关注我...

3039
来自专栏美团技术团队

Redis高负载下的中断优化

Redis 服务端的总体请求量从年初最开始日访问量百亿次级别上涨到高峰时段的万亿次级别,给运维和架构团队都带来了极大的挑战。

1.2K11

扫码关注云+社区

领取腾讯云代金券