天天看點

express圖檔上傳

安裝multer

npm install multer -D
           

server端

const express = require('express')
const multer = require('multer')
const app = express()
const port = 3000
const path = require('path')
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
  	// 這裡是在server端要放圖檔的目錄
    cb(null, './static/img')
  },
  filename: function (req, file, cb) {
  	// 這裡是對檔案重命名
    cb(null, file.originalname)
  }
})
 
var upload = multer({ storage: storage })

//使用express中間件來實作靜态資源服務
//通過http://10.221.224.135:3000/public/   可以通路static下的目錄
app.use('/public',express.static(path.join(__dirname,'./static')))
app.get('/', (req, res) => res.send('Hello World!'))

//single中的字段要和前端上傳的formData的字段一緻
app.post('/upload',upload.single('file'),(req,res)=>{
    console.log(req.file)
    const { path } = req.file
    let paths = path.replace('\\','/') 
    res.send({message:'success',fileurl:paths})
    //傳回在server端存放的路徑
})

app.listen(port, () => console.log(`Example app listening on port port!`))
           

web端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input class="upload" type="file" ref="upload" accept="image/jpeg,image/jpg,image/png">
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.js"></script>
<script>
    const upload = document.getElementsByClassName('upload')[0]
    upload.onchange=(e)=>{
        let file = e.target.files[0]
        let formdata = new FormData()
        formdata.append('file', file)
        axios.post('http://10.221.224.135:3000/upload',formdata,{
            headers: {
          		'Content-Type': 'multipart/form-data'
            },
            transformRequest: [function (data) {
                return data
            }],
        }).then((data)=>{
            console.log(data)
        })
    }
</script>
</html>
           

上傳完成之後可以通過自己的pathname+public/img/xxx.png來通路。

繼續閱讀