国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

4.7 multer文件上傳-博客后端Api-NodeJs+Express+Mysql實戰(zhàn)

android_c / 1988人閱讀

摘要:給上傳文件重命名,獲取添加后綴名允許最大層文件上傳國際化工具類房源附件文件服務(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

相關(guān)文章

  • NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) - 大綱

    摘要:多一個技能多一條出路,祝你在自學(xué)道路上越走越好,掌握自己的核心技能,不只是優(yōu)秀,還要成為不可替代的人 NodeJs+Express+Mysql + Vuejs 項目實戰(zhàn) 最近準(zhǔn)備寫一系列文章,全面講述如何基于NodeJs + Express + Mysql + Vuejs 從零開發(fā)前后端完全分離項目; 文筆及技術(shù)可能在某些方面欠佳,請您指正,共同學(xué)習(xí)進步 前端:Vuejs全家桶 后端:...

    noONE 評論0 收藏0
  • 4.1 開發(fā)環(huán)境目錄結(jié)構(gòu)配置文件功能梳理-博客后端Api-NodeJs+Express+Mys

    摘要:從本章開始,正式學(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....

    DevWiki 評論0 收藏0
  • 4.9 跨域cors-博客后端Api-NodeJs+Express+Mysql實戰(zhàn)

    摘要:跨域跨域請求也可以使用代表允許所有此時咱們啟動服務(wù),在接口調(diào)用時就會有跨域白名單攔截校驗 跨域corshttps://github.com/expressjs/... var config = { cors: { //跨域請求 origin: [http://localhost:5000, http://localhost:5001],//也可以使用*代表允許...

    weij 評論0 收藏0
  • 4.8 國際化i18n-博客后端Api-NodeJs+Express+Mysql實戰(zhàn)

    國際化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, ...

    liuyix 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<