安装和配置multer
注意:使用express.urlencoded()中间件无法解析multipart/form-data格式的请求体 数据。 当前项目,推荐使用 multer 来解析multipart/form-data格式的表单数据。https://www.npmjs.com/package/multer
npm i multer
导入并配置multer :
// 导入解析 formdata 格式表单数据的包
const multer = require('multer')
// 导入处理路径的核心模块
const path = require('path')
// 创建 multer 的实例对象,通过 dest 属性指定文件的存放路径
const upload = multer({ dest: path.join(__dirname, '../uploads') })
// upload.single() 是一个局部生效的中间件,用来解析 FormData 格式的表单数据
// 将文件类型的数据,解析并挂载到 req.file 属性中
// 将文本类型的数据,解析并挂载到 req.body 属性中
router.post("接口路径", upload.single('avatar'), (req, res)=>{ // avatar为file表单的name属性
req.file; // 提交之后通过req.file获取本次提交的信息对象
/*
{ fieldname: 'avatar',
originalname: 'avatar.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: 'public/upload/avatar',
filename: 'ad84a9e186d0e9deaa774c237076cd8b',
path: 'public\\upload\\avatar\\ad84a9e186d0e9deaa774c237076cd8b',
size: 84657 }
*/
})
const express=require('express')
const router=express.Router()
// 导入处理轮播图路由函数模块
const upload_handler = require('../router_handler/upload')
// 导入解析 formdata 格式表单数据的包
const multer = require('multer')
// 导入处理路径的核心模块
const path = require('path')
// 创建 multer 的实例对象,通过 dest 属性指定文件的存放路径
const upload = multer({ dest: path.join(__dirname, '../uploads') })
//上传轮播图
router.post('/uploadFile', upload.single('url'), upload_handler.Upload)
module.exports = router;
利用七牛云实现图片上传功能
七牛云官网 :七牛云 | 一站式场景化智能音视频 APaaS
安装七牛 npm add qiniu
把qn.js放到utils文件夹下:
const qiniu_sdk = require('qiniu')
// const { qiniu } = require('')
qiniu_sdk.conf.ACCESS_KEY = 'mxmPUMJP44fUKw5ZufdpHp76zKmPCr0XD51Tq_tj';
qiniu_sdk.conf.SECRET_KEY = '6yttynCYvOt0-rUvHwMDP9sLb2By1dTZINX4nXZM';
// 要上传的空间
const bucket = "02cook"
// 文件前缀
const prefix = 'image/avatar/'
// 生成上传文件的 token
const token = (bucket, key) => {
const policy = new qiniu_sdk.rs.PutPolicy({ isPrefixalScope: 1, scope: bucket + ':' + key })
return policy.uploadToken()
}
const config = new qiniu_sdk.conf.Config()
async function upload_file(file_name, file_path) {
// 保存到七牛的地址
const file_save_path = prefix + file_name
// 七牛上传的token
const up_token = token(bucket, file_save_path)
const extra = new qiniu_sdk.form_up.PutExtra()
const formUploader = new qiniu_sdk.form_up.FormUploader(config)
// 上传文件
let ret = await new Promise((resolve, reject) => {
formUploader.putFile(up_token, file_save_path, file_path, extra, (err, data) => {
if (!err) {
// 上传成功, 处理返回值
resolve(data);
} else {
// 上传失败, 处理返回代码
reject(data);
}
});
})
return ret
}
// upload_file(上传后的名字,上传的图片路径) //上传的图片相对路径, 从项目文件夹出发
// upload_file('01.jpg', './01.jpg')
module.exports = upload_file
const QINIU_URI="http://rtgs0qdlw.hn-bkt.clouddn.com/"
module.exports={
QINIU_URI
}