专栏首页web开发NodeJS使用formidable实现文件上传

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 条评论
登录 后参与评论

相关文章

  • JavaSript模块规范 - AMD规范与CMD规范介绍

    JavaSript模块化     在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?     模块化是指在解决某一个复杂问题或者...

    用户1174387
  • img标签实现和背景图一样的显示效果——object-fit和object-position

    不知大家在做前端页面的时候,有没有遇到类似这样的问题:有一个不是正方形的图片,可能是宽度大于高度的,也可能是高度大于宽度的,而你又并不想用背景图的方式来做,要实...

    用户1174387
  • 移动端下拉刷新上拉加载-mescroll.js插件

    最近无意间看到有这么一个上拉刷新下拉加载的插件 —— mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后...

    用户1174387
  • 用云开发制作教务助手小程序丨实战

    本项目由一人承担从后端到前端的构思以及开发,下面我就讲讲从教务助手小程序的构思到开发实现(基于云开发)。

    腾讯云开发TCB
  • etcd v2文档(1) -- 单体服务端,客户端http请求api

    IANA为etcd分配的端口是2379用于客户端通信,2380用于服务器到服务器通信。

    solate
  • “汇新杯”互联网产业模式专项赛介绍

    (1)基于互联网和移动互联网的约车、食宿、支付、社交等共享经济和分享经济的新业务;

    创成汇创新创业大赛
  • 二、css3基础

    如p标签 中设置 title 属性显示的效果为 当鼠标放上去的时候显示为设置的内容

    小海怪的互联网
  • linux基础(day22)

    7.6 yum更换国内源 更换yum国内源 cd /etc/yum.repos.d/ rm -f dvd.repo wget http://mirrors.16...

    运维小白
  • 【转载】负采样算法

    任何采样算法都应该保证频次越高的样本越容易被采样出来。基本的思路是对于长度为1的线段,根据词语的词频将其公平地分配给每个词语:

    marsggbo
  • Android Studio 中运行 groovy 程序的方法图文详解

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Ja...

    砸漏

扫码关注云+社区

领取腾讯云代金券