關於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。
推薦閱讀:
- node+express+axios實現單文件上傳功能
- node.js-path模塊你瞭解多少
- node.js文件系統模塊和兩個重要模塊
- Express實現登錄驗證
- 利用node+koa+axios實現圖片上傳和回顯功能