關(guān)于node編寫文件上傳的接口的坑及解決
node編寫文件上傳接口的坑
今天沒事在寫node的接口時(shí)候用到文件上傳的接口給前端,不知道用中間件好一點(diǎn),然后就找度娘,網(wǎng)上都是koa-body中間件,但是那個(gè)自己測試?yán)鲜墙邮詹坏絺鬟^來的文件file的值,然后換另一種就是koa-multer 完美解決。
首先是在這里插入代碼片npm i koa-multer
在app.js引入,進(jìn)行路由
控制器代碼:
路由代碼
然后就完美解決
node(express)圖片上傳接口寫法
作為一名接口調(diào)用師,今天我們來用node寫一個(gè)圖片上傳的接口。。。
需要
node-express框架
const multer = require('multer'); const fs = require('fs') const path = require('path')
需要的三個(gè)模塊,一個(gè)是文件上傳的接口一個(gè)是文件讀取的模塊,一個(gè)是路徑設(shè)置的模塊。
步驟和代碼
完整代碼
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('上傳失敗') } ? ? ? ? ? ? //如果讀取成功 ? ? ? ? ? ? //聲明圖片名字為時(shí)間戳和隨機(jī)數(shù)拼接成的,盡量確保唯一性 ? ? ? ? ? ? let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222); ? ? ? ? ? ? //拓展名 ? ? ? ? ? ? let extname = req.file.mimetype.split('/')[1] ? ? ? ? ? ? ? ? //拼接成圖片名 ? ? ? ? ? ? let keepname = time + '.' + extname ? ? ? ? ? ? ? ? //三個(gè)參數(shù) ? ? ? ? ? ? ? ? //1.圖片的絕對路徑 ? ? ? ? ? ? ? ? //2.寫入的內(nèi)容 ? ? ? ? ? ? ? ? //3.回調(diào)函數(shù) ? ? ? ? ? ? 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('讀取失敗')} }) //一個(gè)是讀取部分一個(gè)是寫入部分,主要就這兩部分。 fs.writeFile(path.join(__basename, '/public/img/' + keepname), data, (err) => { ? ? ? ? ? ? ? ? if (err) { return res.send('寫入失敗') }
如果有和我一樣在學(xué)習(xí)的入門小伙伴,希望你知道在自己的入口文件里面在中間件寫完后使用這兩段代碼,懂得都懂
//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)
大概這個(gè)意思了。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互
這篇文章主要介紹了了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互,需要的朋友可以參考下2014-12-12使用nodejs?+?koa?+?typescript?集成和自動重啟的問題
這篇文章主要介紹了nodejs?+?koa?+?typescript?集成和自動重啟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12nodejs?實(shí)現(xiàn)簡單的文件上傳功能(示例詳解)
這篇文章主要介紹了nodejs?實(shí)現(xiàn)簡單的文件上傳功能,文件上傳方式分為三種,本文通過實(shí)例代碼給大家詳細(xì)介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Node.js API詳解之 vm模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 vm模塊用法,結(jié)合實(shí)例形式分析了Node.js API中vm模塊基本功能、函數(shù)、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-05-05node.js中express中間件body-parser的介紹與用法詳解
這篇文章主要給大家介紹了關(guān)于node.js中express中間件body-parser的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05使用Make構(gòu)建Node.js網(wǎng)站項(xiàng)目
這篇文章介紹了使用Make構(gòu)建Node.js網(wǎng)站項(xiàng)目的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01