multer文件上传
https://github.com/expressjs/...

在博客系统中会涉及到文件上传,这时候需要用到 multer文件上传

model层

/** * Attachment附件表 * @type {[type]} */var Sequelize = require('sequelize');var Mysql = require('./mysql');var Attachment = Mysql.define('attachment', {    uuid: {        type: Sequelize.UUID,        allowNull: false,        primaryKey: true,        defaultValue: Sequelize.UUIDV1,//Sequelize.UUIDV4    }, //uuid    name: Sequelize.STRING, //附件名字    relativeUrl: Sequelize.STRING, //附件相对地址    absoluteUrl: Sequelize.STRING, //附件绝对地址    type: Sequelize.STRING(2), //附件类型(1图片、2视频、3音频、4其他文件)}, {    freezeTableName: true, // 自定义表名    tableName: 'Attachment',    timestamps: true, // 添加时间戳属性 (updatedAt, createdAt)    createdAt: 'createDate',// 将createdAt字段改个名    updatedAt: 'updateDate',// 将updatedAt字段改个名    indexes: [{ // 索引        type: 'UNIQUE',        method: 'BTREE',        unique: true, //唯一        fields: ['uuid'],    }],});module.exports = Attachment;

config层 系统配置

router层

service层

/** * 文件服务 * add by wwj * 2019-05-04 12:03:39 */var fs = require('fs');var path = require('path'); //路径var uuid = require('node-uuid'); //uuidvar Promise = require("bluebird");var multer = require('multer'); //文件上传var config = require('config-lite'); //配置module.exports = {    /**     * 获取年月     */    getYearMonth: function() {        var fdate = new Date();        return fdate.getFullYear() + '' + (fdate.getMonth() + 1) + '' + fdate.getDate();    },    /**     * 连接文件存放路径     * type文件对应类型 比如文章对应article     * filename 文件名含后缀名     */    createFilePath: function(pathType, filename) {        var that = this;        var fpath = path.join(__dirname, '../public/attchments', (pathType || 'default'), that.getYearMonth());        if (!fs.existsSync(fpath)) {            fs.mkdirSync(fpath);        }        if (filename) {            return fpath + '/' + filename;        } else {            return fpath;        }    },    /**     * 处理文件上传     */    setFileUpload: function(opts) {        var that = this;        var storage = multer.diskStorage({            //设置上传后文件路径,uploads文件夹会自动创建。            destination: function(req, file, cb) {                cb(null, that.createFilePath(opts.pathType))            },            //给上传文件重命名,获取添加后缀名            filename: function(req, file, cb) {                var fileFormat = file.originalname.split(".");                // cb(null, file.originalname + '_' + Math.ceil(Math.random()*9) + Date.now() + "." + fileFormat[fileFormat.length - 1]);                cb(null, uuid() + "." + fileFormat[fileFormat.length - 1]);            },        });        var upload = multer({            limits: {                fileSize: config.file.limit.fileSize[opts.pathType] || config.file.limit.fileSize.default, //允许最大            },            storage: storage,        });        return upload;    }}

controller层文件上传

/** * common controllers * add by wwj * 2016-12-22 17:45:53 */var co = require('co');var Promise = require("bluebird");var i18n = require('i18n'); //国际化var utils = require('../libs/utils'); //工具类var Attachment = require('../models/index').Attachment; //房源附件var fileService = require('../services/file'); //文件服务module.exports = {  /**   * 文件上传   */  uploadEnclosure: function(req, res, next) {    //文件s    var files = req.files;    if (!files || !files.length) {      //err      utils.handleError({        response: res,        error: i18n.__('uploadFileFail'),      });      return;    }    co(function*() {      //all      var fileResult = yield Promise.all(files.map(function(file) {        return Attachment.create({          name: file.originalname, //文件名          relativeUrl: file.filename, //相对路径          absoluteUrl: fileService.getFilePath("default", file.filename),          type: fileService.handlerFileType(file.mimetype), //对应int值          size: file.size, //文件大小        });      }));      //success      utils.handleJson({        response: res,        msg: i18n.__('uploadFileSuccess'),        result: {          fileList: fileResult,        },      });    }).catch(function(error) {      //err      utils.handleError({        response: res,        error: error,      });    });  },};

后面写到前端的时候再说 怎么ajax fileupload调用