剧场模式
首页后端Nodejs + Express + MongoDB 基础篇

Node.js + Express + MongoDB 基础篇 #6 上传文件

下载源码hfpp2012发布于Nodejs2023 次点击播放时长:06:43
2

资源

代码

var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');

var app = express();
var multer = require('multer');

var createFolder = function(folder) {
    try {
        fs.accessSync(folder);
    } catch (e) {
        fs.mkdirSync(folder);
    }
};

var uploadFolder = './upload/';

createFolder(uploadFolder);

var storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, uploadFolder);
    },
    filename: function(req, file, cb) {
        cb(null, file.originalname);
    }
});

var upload = multer({ storage: storage });

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.get('/', function(req, res) {
    console.dir(req.query);
    res.send("home page: " + req.query.find);
});

app.get('/form', function(req, res) {
    var form = fs.readFileSync('./form.html', { encoding: "utf8" });
    res.send(form);
});

app.post('/', urlencodedParser, function(req, res) {
    console.dir(req.body);
    res.send(req.body.name);
});

app.post('/upload', upload.single('logo'), function(req, res) {
    console.dir(req.file);
    res.send({ 'ret_code': 0 });
});

app.get('/profile/:id/user/:name', function(req, res) {
    console.dir(req.params);
    res.send("You requested to see a profile with the name of " + req.params.name);
});

app.get('/ab?cd', function(req, res) {
    res.send('/ab?cd');
})

app.listen(3000);
console.log('listening to port 3000');

form.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <h2>单图上传</h2>
        <input type="file" name="logo">
        <input type="submit" value="提交">
    </form>
</body>

</html>
3 条回复
  • ByeWord #1
    app.get('/form',(req,res)=>{
        // 这里的话需要用同步读取文件,异步的话fileData将在响应前得不到内容
       let fileData = fs.readFileSync('./pages/form.html',{encoding:'utf8'});
       res.send(file);
    })
    
  • ByeWord #2
    let express = require('express');
    let bodyParser = require('body-parser')
    let fs = require('fs');
    
    let app = express();
    var multer = require('multer');
    
    // 创建目录的函数
    var createFolder = function (folder) {
        try {
            //判断目录是否存在,使用同步,异步不行
            //目录不存在会抛出异常
            fs.accessSync(folder);
        } catch (e) {
            // 抛出异常后创建目录,同步创建
            fs.mkdirSync(folder);
        }
    };
    // 文件目录的字符串(相对路径)
    var uploadFolder = './upload/';
    //调用目录创建函数 ==>目录创建完成
    createFolder(uploadFolder);
    
    // 创建一个storage对象
    //The disk storage engine gives you full control on storing files to disk.
    // 翻译的意思是:这个硬盘存储引擎可以让你完全掌控把文件存储到硬盘==>意思是:按照你想要的方式存储上传来的文件
    var storage = multer.diskStorage({
        // 设置存放位置
        destination: function (req, file, cb) {
            cb(null, uploadFolder);
        },
        // 设置文件名称
        filename: function (req, file, cb) {
            cb(null, file.originalname);
        }
    });
    // 使用storage
    var upload = multer({
        storage: storage
    });
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({
        extended: false
    }))
    
    // parse application/json
    app.use(bodyParser.json())
    
    app.get('/form', (req, res) => {
        // 这里的话需要用同步读取文件,异步的话fileData将在响应前得不到内容
        let fileData = fs.readFileSync('./pages/form.html', {
            encoding: 'utf8'
        });
        res.send(fileData);
    })
    // app.post(path, callback [, callback ...])可以放多个回调函数,意思是你可以放一下中间件
    //upload.single('logo') ==>single代表单文件上传 和name属性保持一致 <input type="file" name="logo">
    //upload.single('avatar') // 单文件上传
    //upload.array('photos', 12) //文本上传
    //upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])//多文件上传
    app.post('/upload', upload.single('logo'), (req, res) => {
        console.dir(req.file);
        res.send({
            'ret_code': 0
        });
    })
    app.listen(3000, '127.0.0.1', () => {
        console.log("started");
    })
    
  • CrazyCatzzz #3

    如何支持中文名称的文件上传

支付宝付款
微信扫码打赏

加我微信:15014006126

加 QQ 群:697272886(1 群)

加 QQ 群:856141852(2 群)

相似的视频
Node.js + Express + MongoDB 基础篇 #4 查询字符串

Node.js + Express + MongoDB 基础篇 #4 查询字符串

免费播放时长:02:21

2879 次点击

轻松学 Node.js - 基础篇 #6 读写文件(同步,异步)

轻松学 Node.js - 基础篇 #6 读写文件(同步,异步)

免费播放时长:07:17

3685 次点击

Node.js + Express + MongoDB 基础篇 #9 中间件

Node.js + Express + MongoDB 基础篇 #9 中间件

免费播放时长:07:36

2330 次点击

Node.js + Express + MongoDB 基础篇 #7 板模引擎介绍

Node.js + Express + MongoDB 基础篇 #7 板模引擎介绍

免费播放时长:05:41

2741 次点击

Node.js + Express + MongoDB 基础篇 #10 路由中间件

Node.js + Express + MongoDB 基础篇 #10 路由中间件

免费播放时长:04:31

3157 次点击

© Rails365 | 隐私条款 | 服务条款 | 粤ICP备15004902号 | 在线学员:11

Top