關於node編寫文件上傳的接口的坑及解決

node編寫文件上傳接口的坑

今天沒事在寫node的接口時候用到文件上傳的接口給前端,不知道用中間件好一點,然後就找度娘,網上都是koa-body中間件,但是那個自己測試老是接收不到傳過來的文件file的值,然後換另一種就是koa-multer 完美解決。

首先是在這裡插入代碼片npm i koa-multer

在app.js引入,進行路由

控制器代碼:

路由代碼

然後就完美解決

node(express)圖片上傳接口寫法

作為一名接口調用師,今天我們來用node寫一個圖片上傳的接口。。。

需要

node-express框架

const multer = require('multer');
const fs = require('fs')
const path = require('path')

需要的三個模塊,一個是文件上傳的接口一個是文件讀取的模塊,一個是路徑設置的模塊。

步驟和代碼

完整代碼

const multer = require('multer');
const fs = require('fs')
const path = require('path')
module.exports = (app) => {
    let upload = multer({ dest: 'uploads/' })
    app.post('/img', upload.single('test'),             function(req, res, next) {
        //讀取文件路徑(uploads/文件夾下面的新建的圖片地址)
        console.log(req.file);
        fs.readFile(req.file.path, (err, data) => {
            //如果讀取失敗
            if (err) { return res.send('上傳失敗') }
            //如果讀取成功
            //聲明圖片名字為時間戳和隨機數拼接成的,盡量確保唯一性
            let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
            //拓展名
            let extname = req.file.mimetype.split('/')[1]
                //拼接成圖片名
            let keepname = time + '.' + extname
                //三個參數
                //1.圖片的絕對路徑
                //2.寫入的內容
                //3.回調函數
            fs.writeFile(path.join(__basename, '/public/img/' + keepname), data, (err) => {
                if (err) { return res.send('寫入失敗') }
                res.send({ err: 0, msg: '上傳ok', data: '/public/img/' + keepname })
            });
        });
    });
}

代碼分解

fs.readFile(req.file.path, (err, data)=>{
    if(err){res.send('讀取失敗')}
})
//一個是讀取部分一個是寫入部分,主要就這兩部分。
fs.writeFile(path.join(__basename, '/public/img/' + keepname), data, (err) => {
                if (err) { return res.send('寫入失敗') }

如果有和我一樣在學習的入門小夥伴,希望你知道在自己的入口文件裡面在中間件寫完後使用這兩段代碼,懂得都懂

//head
let express =require('express')
let router =require('/your router path')
const app =express()
...
//main
router(app)
//other
    app.use((req, res) => {
    res.status(404).send('沒有找到資源')
})
app.listen(8080)

大概這個意思瞭。以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: