Nodeexpress搭建后台,接收前端传来的文件
Node搭建后台服务器,接收前端传来的文件
用到的npm包
npm install express multer body-parser uuid --save
文件目录
文件目录介绍
controller:用于存放上传文件逻辑
middle:multer包逻辑
router:路由
uploads:从前端上传来的文件
搭建一个服务器
// index.ts
import express from "express"
import homeRouter from "./router/home"
import bodyParser from "body-parser";
const app = express();
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use("/api", homeRouter)
app.listen(928, () => {
console.log('running 928')
})
文件上传路由逻辑
// home.ts
import { Router } from "express"
import { homeUpload } from "../controller/home.controller"
const router = Router()
router.post("/file", homeUpload)
export default router
multer配置
// upload.ts
import multer from "multer"
import { v1 as uuidV1 } from "uuid"
import fs from "fs"
import path from "path"
import { Request } from "express"
const memoryDest = path.resolve("./uploads")
const storage = multer.diskStorage({
// 文件存储位置
destination: (req, file, cb) => {
// 校验文件夹是否存在,如果不存在则创建一个
const isExists = fs.existsSync(memoryDest)
if (!isExists) {
fs.mkdirSync(memoryDest)
}
cb(null, memoryDest)
},
filename: (req, file, cb) => {
// 生成唯一文件名
const uid = uuidV1();
// 获取文件扩展名
let ext = path.extname(file.originalname)
cb(null, uid ext)
}
})
// 过滤文件
function fileFilter(req: Request, file: Express.Multer.File, callback: multer.FileFilterCallback): void {
if (!file) {
callback(null, false)
} else {
callback(null, true)
}
}
export const upload = multer({
// 文件大小校验
storage: storage, fileFilter: fileFilter, limits: {
fileSize: 20 * 1024 * 1024
}
}).single("file")
文件上传逻辑
import fs from "fs"
import path from "path"
import { upload } from "../middle/upload"
import { MulterError } from "multer"
const fileType = ["image/jpg", "image/jpeg", "image/png"]
export const homeUpload = (req, res): void => {
upload(req, res, function (multerErr) {
if (multerErr instanceof MulterError) {
if (multerErr.code === "LIMIT_FILE_SIZE") {
res.status(200).json({ code: 400, message: "文件最大只能上传20M" })
} else {
}
} else {
if (req.file) {
const filePath = path.resolve(req.file?.destination as string, req.file?.filename as string)
if (!fileType.includes(req.file.mimetype)) {
fs.unlinkSync(filePath)
res.status(200).json({ code: 400, message: "不支持此类型文件" })
} else {
fs.readFile(req.file.path, (err, data) => {
if (err) {
throw err
}
fs.writeFile(filePath, data, (fsErr) => {
if (fsErr) {
res.status(200).json({ code: 400, message: fsErr })
}
res.status(200).json({ code: 200, message: "上传成功" })
})
})
}
} else {
res.status(200).json({ code: 400, message: "请上传文件" })
}
}
})
}
使用APIFox请求测试
执行结果
遇到Bug需要帮助,欢迎加wx:xmzl1988
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggaffa
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13