koa中上传文件对于不支持的文件格式返回错误信息

我这里使用的是koa-body来接受文件:

const koa = require('koa')
//user路由
// const userRouter = require('../router/user.route')
//商品路由
// const goodsRouter = require('../router/goods.route')
const router = require('../router')

const koaBody = require('koa-body')
const koaStatic = require('koa-static')

const app = new koa()
const errHandler = require('./errHadnler')
const path = require('path')

app.use(koaBody({
    
    
	multipart: true,
	formidable: {
    
    
		//设置保存文件的路径
		//在配置选项的option里,这里不推荐写相对路径
		//在option里的相对路径,不是相对的当前文件,而是相对于process.cwd()(脚本在哪里执行,相对于哪个路径)
		
		//也可以相对于服务器的相对路径:
		// uploadDir: './src/upload',
		
		//一般这里使用绝对路径
		uploadDir: path.join(__dirname, '../upload'),
		//是否保留文件扩展名
		keepExtensions: true
	}
}))

//开放静态资源路径
app.use(koaStatic(path.join(__dirname, '../upload')))
//挂载
app.use(router.routes())

//注册中间件
/*app.use(userRouter.routes())
app.use(goodsRouter.routes())*/


//统一的错误处理:
app.on('error', errHandler)

// 导出:
module.exports = app

后端在存储文件之后,会将上传之后的文件信息挂载在ctx.files上,而此时可以通过ctx.request.files.type来获取上传文件的文件格式:

const path = require('path')
const {
    
    fileUploadError, unSupportedFileType} = require('../constant/err.type')
class GoodsController {
    
    
	//上传文件
	async upload (ctx, next) {
    
    
		const {
    
    file} = ctx.request.files
		const fileTypes = ['image/jpeg', 'image/png']
		if (file) {
    
    
			//如果不是fileTypes 中的文件格式,报错:
			if ( ! fileTypes.includes(file.type)) {
    
    
				return ctx.app.emit('error', unSupportedFileType, ctx)
			}
			ctx.body = {
    
    
				code: 0,
				message: '商品上传成功',
				result: {
    
    
					//获取文件最后的文件名:path.basename()
					goods_img: path.basename(file.path)
				}
			}
		} else {
    
    
			return ctx.app.emit('error', fileUploadError, ctx)
		}
	}
}
module.exports = new GoodsController()

在list中写下想要支持的文件格式:
const fileTypes = ['image/jpeg', 'image/png']
判断是否是想要支持的文件格式:
fileTypes.includes(file.type)
如果不是,则直接returnctx.app.emit('error', fileUploadError, ctx)

注意,上面的步骤是在保存了文件之后再进行判断文件格式,所以会保存文件的,最稳妥的还是在上传文件的中间件判断

猜你喜欢

转载自blog.csdn.net/ice_stone_kai/article/details/124548615