使用express+multer實現node中的圖片上傳

使用express+multer實現node中的圖片上傳

在前端中,咱們使用ajax來異步上傳圖片,使用file-input來上傳圖片,使用formdata對象來處理圖片數據,post到服務器中css

在node中使用multer中間件來對上傳路由接口進行處理
multer文檔
package.json
html

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)
}前端

相關文章
相關標籤/搜索