当前位置: 首页 > 后端技术 > Node.js

4.7多文件上传-博客后台Api-NodeJs+Express+Mysql实战

时间:2023-04-03 12:25:46 Node.js

多文件上传https://github.com/expressjs/...在博客系统中,会涉及到文件上传。这时候就需要用到multerfileuploadmodel层/***Attachment附件表*@type{[type]}*/varSequelize=require('sequelize');varmysql=require('./mysql');varAttachment=Mysql.define('attachment',{uuid:{type:Sequelize.UUID,allowNull:false,primaryKey:true,defaultValue:Sequelize.UUIDV1,//Sequelize.UUIDV4},//uuid名称:Sequelize.STRING,//附件名称relativeUrl:Sequelize.STRING,//附件相对地址absoluteUrl:Sequelize.STRING,//附件绝对地址类型:Sequelize.STRING(2),//附件类型(1图片,2视频,3audio,4otherfiles)},{freezeTableName:true,//自定义表名tableName:'Attachment',timestamps:true,//添加时间戳属性(updatedAt,createdAt)createdAt:'createDate',//重命名createdAt字段toupdatedAt:'updateDate',//将updatedAt字段重命名为indexes:[{//Indextype:'UNIQUE',method:'BTREE',unique:true,//uniquefields:['uuid'],}],});module.exports=附件;配置层系统配置路由器层服务层/***文件服务*由wwj添加*2019-05-0412:03:39*/varfs=require('fs');varpath=require('path');//路径varuuid=require('node-uuid');//uuidvarPromise=require("bluebird");varmulter=require('multer');//文件上传varconfig=require('config-lite');//配置module.exports={/***获取年月*/getYearMonth:function(){varfdate=newDate();返回fdate.getFullYear()+''+(fdate.getMonth()+1)+''+fdate.getDate();},/***连接文件存放路径*type文件对应类型,如文章对应文章*filename带后缀名的文件名*/createFilePath:function(pathType,filename){varthat=this;varfpath=path.join(__dirname,'../public/attchments',(pathType||'default'),that.getYearMonth());如果(!fs.existsSync(fpath)){fs.mkdirSync(fpath);}如果(文件名){返回fpath+'/'+文件名;}else{返回fpath;}},/***处理文件上传*/setFileUpload:function(opts){varthat=this;varstorage=multer.diskStorage({//设置上传后的文件路径,自动创建uploads文件夹destination:function(req,file,cb){cb(null,that.createFilePath(opts.pathType))},//重命名上传的文件并获取文件扩展名:function(req,file,cb){varfileFormat=file.originalname.split(".");//cb(null,file.originalname+'_'+Math.ceil(Math.random()*9)+Date.now()+"."+fileFormat[fileFormat.length-1]);cb(null,uuid()+"."+fileFormat[fileFormat.长度-1]);},});varupload=multer({limits:{fileSize:config.file.limit.fileSize[opts.pathType]||config.file.limit.fileSize.default,//允许最大},storage:storage,});返回上传;}}controller层文件上传/***commoncontrollers*addbywwj*2016-12-2217:45:53*/varco=require('co');varPromise=require("bluebird");vari18n=require('i18n');//国际化varutils=require('../libs/utils');//工具类varAttachment=require('../models/index').Attachment;//属性附件varfileService=require('../services/file');//文件服务module.exports={/***文件上传*/uploadEnclosure:function(req,res,next){//filesvarfiles=req.files;if(!files||!files.length){//errutils.handleError({response:res,error:i18n.__('uploadFileFail'),});返回;}co(function*(){//allvarfileResult=yieldPromise.all(files.map(function(file){returnAttachment.create({name:file.originalname,//文件名relativeUrl:file.filename,//相对路径absoluteUrl:fileService.getFilePath("default",file.filename),type:fileService.handlerFileType(file.mimetype),//对应的int值size:file.size,//文件大小});}));//成功工具。handleJson({response:res,msg:i18n.__('uploadFileSuccess'),result:{fileList:fileResult,},});}).catch(function(error){//errutils.handleError({response:res,error:error,});});},};后面写前端的时候会讲ajaxfileupload的调用