zoukankan      html  css  js  c++  java
  • 使用express+multer实现node中的图片上传

    使用express+multer实现node中的图片上传

    在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中

    在node中使用multer中间件来对上传路由接口进行处理
    multer文档
    package.json

    html部分

    <body>
    <div class="form-group">
            <label>File input:</label>
    
            <input type="file" name="file" id="file">
    
            <p id="result"></p>
    
            <img id="img" src="">
        </div>
    
        <button id="upload" class="btn btn-default">提交</button>
    
        </body>
    
    

    js部分

        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <script>
            //上传图片的业务逻辑函数
            function uploadFile(){
                //上传图片的input
                var file = document.getElementById("file")
                //因为准备用post提交,又因为图片的内容比较大,所以我们选择使用formdata来承载数据
                //创建formdata对象
                var formData = new FormData();
                //给formdata对象中放入数据(键值对的方式)
                formData.append('file',file.files[0]);
                //提交请求
                $.ajax({
                    url: '/upload',//请求路径
                    type: 'POST',
                    data: formData,
                    contentType: false,//为了让浏览器根据传入的formdata来判断contentType
                    processData: false,//同上
                    success: function(data){
                        if(200 === data.code) {
                            $('#result').html("上传成功!");
                            $('#img').attr('src',data.data);
                        } else {
                            $('#result').html("上传失败!");
                        }
                        console.log(2)
                    },
                    error: function(){
                        $("#result").html("与服务器通信发生错误");
                    }
                });
                console.log(1)
            }
            //给按钮添加点击事件
            function postPage() {
                    //上传按钮
                    var uploada = document.getElementById('upload');
                    uploada.addEventListener("click",function () {
                        uploadFile();
                    },false);
            }
            window.onload = function () {
                postPage();
            }
    </script>
    
    

    NodeJS逻辑代码

    const http = require('http')
    const path = require('path')
    const express = require('express')
    
    //是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件
    //文档:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
    const multer = require('multer')
    
    const app = express()
    //配置express的静态目录
    app.use(express.static(path.join(__dirname, 'public')));
    
    
    app.get('/',(req,res)=>{
        res.sendFile(__dirname+'/index.html')
    })
    
    
    
    //配置diskStorage来控制文件存储的位置以及文件名字等
    var storage = multer.diskStorage({
        //确定图片存储的位置
        destination: function (req, file, cb){
            cb(null, './public/uploadImgs')
        },
    
    ![](http://images2017.cnblogs.com/blog/1283058/201802/1283058-20180201154342296-515041615.png)
    
    
        //确定图片存储时的名字,注意,如果使用原名,可能会造成再次上传同一张图片的时候的冲突
        filename: function (req, file, cb){
            cb(null, Date.now()+file.originalname)
        }
    });
    //生成的专门处理上传的一个工具,可以传入storage、limits等配置
    var upload = multer({storage: storage});
    
    //接收上传图片请求的接口
    app.post('/upload', upload.single('file'), function (req, res, next) {
        //图片已经被放入到服务器里,且req也已经被upload中间件给处理好了(加上了file等信息)
        
        //线上的也就是服务器中的图片的绝对地址
        var url = '/uploadImgs/' + req.file.filename
        res.json({
            code : 200,
            data : url
        })
    });
    
    
    http.createServer(app).listen(3000,()=>{
        console.log('server is listening')
    })
    
    

    自我感觉良好,不知道博客园为什么要给我移除首页....
    再发一次,if(delete){
    alert('Never publish anything again.')
    }else{
    alert(1)
    }

  • 相关阅读:
    关于路径的小知识点
    转发与重定向
    一种反复的读写文件的方法
    文字排版reportlab
    Qgis中插件的安装位置
    spyder打开文件假死解决
    地图跳跃-超级码力
    尾部的零
    一探torch.nn究竟“What is torch.nn really?”
    KAZE特征和各向异性扩散滤波
  • 原文地址:https://www.cnblogs.com/mxs-blog/p/8399377.html
Copyright © 2011-2022 走看看