摘要:給上傳文件重命名,獲取添加后綴名允許最大層文件上傳國際化工具類房源附件文件服務(wù)文件上傳文件文件名相對路徑對應(yīng)值文件大小后面寫到前端的時候再說怎么調(diào)用
multer文件上傳
https://github.com/expressjs/...
在博客系統(tǒng)中會涉及到文件上傳,這時候需要用到 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層 系統(tǒng)配置 router層 service層
/** * 文件服務(wù) * add by wwj * 2019-05-04 12:03:39 */ var fs = require("fs"); var path = require("path"); //路徑 var uuid = require("node-uuid"); //uuid var 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文件對應(yīng)類型 比如文章對應(yīng)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({ //設(shè)置上傳后文件路徑,uploads文件夾會自動創(chuàng)建。 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"); //文件服務(wù) 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), //對應(yīng)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調(diào)用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104097.html
摘要:多一個技能多一條出路,祝你在自學(xué)道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) 最近準(zhǔn)備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項目; 文筆及技術(shù)可能在某些方面欠佳,請您指正,共同學(xué)習(xí)進步 前端:Vuejs全家桶 后端:...
摘要:從本章開始,正式學(xué)習(xí)如何使用搭建一個博客。但通常我們都會有許多環(huán)境,如本地開發(fā)環(huán)境測試環(huán)境和線上環(huán)境等,不同的環(huán)境的配置不同,我們不可能每次部署時都要去修改引用或者。會根據(jù)環(huán)境變量的不同從當(dāng)前執(zhí)行進程目錄下的目錄加載不同的配置文件。 從本章開始,正式學(xué)習(xí)如何使用 Nodejs + Express + Mysql 搭建一個博客。 開發(fā)環(huán)境 首先說下開發(fā)環(huán)境安裝的核心依賴版本: Node....
摘要:跨域跨域請求也可以使用代表允許所有此時咱們啟動服務(wù),在接口調(diào)用時就會有跨域白名單攔截校驗 跨域corshttps://github.com/expressjs/... var config = { cors: { //跨域請求 origin: [http://localhost:5000, http://localhost:5001],//也可以使用*代表允許...
國際化i18nhttps://github.com/mashpie/i1... showImg(https://segmentfault.com/img/bVbr9I9?w=1850&h=948); 業(yè)務(wù)使用: showImg(https://segmentfault.com/img/bVbr9Jp?w=1330&h=598); en.json { success: success, ...
閱讀 2430·2021-11-23 10:04
閱讀 1501·2021-09-02 15:21
閱讀 897·2019-08-30 15:44
閱讀 1068·2019-08-30 10:48
閱讀 713·2019-08-29 17:21
閱讀 3562·2019-08-29 13:13
閱讀 1989·2019-08-23 17:17
閱讀 1792·2019-08-23 17:04