zoukankan      html  css  js  c++  java
  • multer实现图片上传

    multer实现图片上传:

    ejs代码:

    <!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>图片上传</title>
    </head>
    
    <body>
        <!-- 
            在终端安装:cnpm install multer
            Multer是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件。该中间件不处理multipart/form-data数据格式以外的任何形式的数据
    
         -->
        <!-- 单张上传 -->
        <h3>单张上传</h3>
        <form action="/uploadImg/addimg" method="post" enctype="multipart/form-data">
            <input type="file" name="img" id="img1">
            <input type="submit" value="提交">
        </form>
    
        <!-- 多张上传 -->
        <h3>多张上传</h3>
        <form action="/uploadImg/addimgs" method="post" enctype="multipart/form-data">
            <input type="file" name="imgs" multiple id="img2">
            <input type="submit" value="提交">
        </form>
    
        <!-- ajax单张上传图片 -->
        <h3>ajax单张上传图片</h3>
        <input type="file" name="ajaximg" id="ajaximg">
        <input type="submit" value="提交" id="ajaxbtn">
    
        <!-- ajax多张上传图片 -->
        <h3>ajax多张上传图片</h3>
        <input type="file" name="ajaximg" multiple id="ajaximgs">
        <input type="submit" value="提交" id="ajaxbtns">
    </body>
    <script src="web/js/jquery-1.10.1.min.js"></script>
    <script>
        // ajax单张上传
        $("#ajaxbtn").click(function (e) {
            // console.log($("#ajaximgs")[0].file[0])
            let file = $("#ajaximg")[0].files[0];
            let formdata = new FormData();
            formdata.append("img", file);
            // ajax单张上传                      
            $.ajax({
                type: "POST",//默认post
                url: "/uploadImg/addimg",//默认当前页
                data: formdata,//格式(key:value)
                contentType: false,
                processData: false,
                dataType: "json",
                beforeSend: function () { },//请求发送当前回调,常用验证
                success: function (response) {//请求成功回调
                    alert("上传成功");
                },
                error: function (e) {
                    if (e.statusText == "timeout") {
                        alert("请求成功");
    
                    }
                },
                // 请求成功与否都会执行的回调
                complete: function () { }
            });
        });
    
        // ajax多张上传
        $("#ajaxbtns").click(function (e) {
            //  console.log($("#ajaximgs")[0].files)
            let files = $("#ajaximgs")[0].files;
            let formdata = new FormData();
            for (const file of files) {
                formdata.append("imgs", file);
            }
            // ajax单张上传
            $.ajax({
                type: "POST",//默认post
                url: "/uploadImg/addimgs",//默认当前页
                data: formdata,//格式(key:value)
                contentType: false,
                processData: false,
                dataType: "json",
                beforeSend: function () { },//请求发送当前回调,常用验证
                success: function (response) {//请求成功回调
                    alert("上传成功");
                },
                error: function (e) {
                    if (e.statusText == "timeout") {
                        alert("请求成功");
    
                    }
                },
                // 请求成功与否都会执行的回调
                complete: function () { }
            });
        });
    </script>
    
    </html>

    服务器代码:

    // 引入模块
    var express = require('express');
    var fs = require("fs");
    var router = express.Router();
    var multer = require("multer");
    // 设置上传图片的文件夹
    var upload = multer({ dest: "public/uploads/" });
    
    /* GET home page. */
    router.get('/', function (req, res, next) {
        res.render("phone/uploadImg");
    });
    // .single(fieldname)
    // 该方法接收单个上传的文件 fieldname为上传文件所用的标签name属性。上传的文件信息存储在req.file中
    // 单张上传
    router.post('/addimg', upload.single("img"), function (req, res) {
        let file = req.file;
        // fieldname: 上传文件标签在表单中的name
        let filename = "public/uploads/" + file.filename;
        // 判断上传的图片格式
        // mimetype:该文件的Mime type
        if (file.mimetype == "image/jpeg") {
            filename += ".jpg";
        }
        if (file.mimetype == "image/png") {
            filename += ".png";
        }
        if (file.mimetype == "image/gif") {
            filename += ".gif";
        }
        fs.renameSync(file.path, filename);
        console.log(req.file);
        // 响应
        res.json("上传成功");
    });
    
    // 多张图片上传
    router.post('/addimgs', upload.array("imgs"), function (req, res) {
        let files = req.files;
        
        for (let file of files) {
            // fieldname: 上传文件标签在表单中的name
            let filename = "public/uploads/" + file.filename;
            // 判断上传的图片格式
            // mimetype:该文件的Mime type
            if (file.mimetype == "image/jpeg") {
                filename += ".jpg";
            }
            if (file.mimetype == "image/png") {
                filename += ".png";
            }
            if (file.mimetype == "image/gif") {
                filename += ".gif";
            }
            fs.renameSync(file.path, filename);
        }
        console.log(req.file);
        // 响应
        res.json("上传成功");
    });
    
    module.exports = router;

    路由接口:

    var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    // 前端
    // var indexRouter = require('./routes/index');
    // var usersRouter = require('./routes/users');
    // var IndexRouter = require('./routes/phone/index');
    // var detailRouter = require('./routes/phone/detail');
    // var newsShowRouter = require('./routes/phone/news-show');
    // var newsRouter = require('./routes/phone/news');
    // var otherListRouter = require('./routes/phone/other-list');
    // var proListRouter = require('./routes/phone/pro-list');
    // var tableRouter = require('./routes/phone/table');
    var uploadImgRouter = require('./routes/phone/uploadImg');//图片上传路由
    
    // 后台
    var adminRouter = require('./routes/admin/index');
    var adminMainRouter = require('./routes/admin/pages/main');
    var adminDelRouter = require('./routes/admin/pages/article/del');
    var adminIndexRouter = require('./routes/admin/pages/article/index');
    var adminEditRouter = require('./routes/admin/pages/article/edit');
    
    
    
    var app = express();
    
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    
    
    // 设置public为局部变量
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/', indexRouter);
    // app.use('/users', usersRouter);
    // app.use('/index', IndexRouter);
    // app.use('/detail', detailRouter);
    // app.use('/newsShow', newsShowRouter);
    // app.use('/news', newsRouter);
    // app.use('/other', otherListRouter);
    // app.use('/pro', proListRouter);
    // app.use('/table', tableRouter);
    app.use('/uploadImg', uploadImgRouter);
    
    // 后台
    // app.use('/admins', adminRouter);
    // app.use('/adminMain', adminMainRouter);
    // app.use('/adminDel', adminDelRouter);
    // app.use('/adminindex', adminIndexRouter);
    // app.use('/adminEdit', adminEditRouter);
    
    
    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      next(createError(404));
    });
    
    // error handler
    app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};
    
      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });
    
    module.exports = app;

      

  • 相关阅读:
    hdu1848(sg函数打表)
    hdu1850(nim博弈)
    hdu1847(sg函数&yy)
    hdu2147(yy)
    poj2133(sg函数)
    Educational Codeforces Round 18D(完全二叉树中序遍历&lowbit)
    atcoder057D(组合数模板)
    euler证明
    04_过滤器Filter_04_Filter生命周期
    04_过滤器Filter_03_多个Filter的执行顺序
  • 原文地址:https://www.cnblogs.com/xiaozhou223/p/11851172.html
Copyright © 2011-2022 走看看