關(guān)于node編寫文件上傳的接口的坑及解決
node編寫文件上傳接口的坑
今天沒事在寫node的接口時(shí)候用到文件上傳的接口給前端,不知道用中間件好一點(diǎn),然后就找度娘,網(wǎng)上都是koa-body中間件,但是那個(gè)自己測(cè)試?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.圖片的絕對(duì)路徑
? ? ? ? ? ? ? ? //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?集成和自動(dòng)重啟的問題
這篇文章主要介紹了nodejs?+?koa?+?typescript?集成和自動(dòng)重啟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
nodejs?實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能(示例詳解)
這篇文章主要介紹了nodejs?實(shí)現(xiàn)簡(jiǎn)單的文件上傳功能,文件上傳方式分為三種,本文通過實(shí)例代碼給大家詳細(xì)介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Node.js API詳解之 vm模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 vm模塊用法,結(jié)合實(shí)例形式分析了Node.js API中vm模塊基本功能、函數(shù)、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
node.js中express中間件body-parser的介紹與用法詳解
這篇文章主要給大家介紹了關(guān)于node.js中express中間件body-parser的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
在Node.js應(yīng)用中使用Redis的方法簡(jiǎn)介
這篇文章主要介紹了在Node.js應(yīng)用中使用Redis的方法,最簡(jiǎn)單的數(shù)據(jù)讀寫操作相關(guān),需要的朋友可以參考下2015-06-06
使用Make構(gòu)建Node.js網(wǎng)站項(xiàng)目
這篇文章介紹了使用Make構(gòu)建Node.js網(wǎng)站項(xiàng)目的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
簡(jiǎn)單談?wù)刵ode.js 版本控制 nvm和 n
大量開發(fā)者的貢獻(xiàn)使Node版本的迭代速度很快,版本很多(橫跨0.6到0.11),所以升級(jí)Node版本就成為了一個(gè)問題。目前有n和nvm這兩個(gè)工具可以對(duì)Node進(jìn)行無痛升級(jí),本文簡(jiǎn)單介紹一下二者的使用。2015-10-10

