首頁 > 軟體

關於node編寫檔案上傳的介面的坑及解決

2022-06-06 22:00:15

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)

大概這個意思了。以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com