node.js連接mysql數(shù)據庫麻掸,實現(xiàn)單文件氓扛、多文件上傳,并保存到數(shù)據庫

一论笔、靜態(tài)頁面:

<body>
    <h1>單上傳文件</h1>
    <form action="/uploadFile.do" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile">
        <button>上傳</button>
    </form>

    <h1>多文件上傳</h1>
    <form action="/uploadFiles.do" method="post" enctype="multipart/form-data">
        <input type="file" name="myFiles" multiple="multiple">
        <button>多文件上傳</button>
    </form>
</body>

二采郎、在app.js里搭建服務器并配置,設置并監(jiān)聽端口

//========================搭建服務器并配置=================
const express=require("express");//加載express 資源
const logger=require("morgan");//日志模塊
const app=express();//執(zhí)行express 全局函數(shù)狂魔,返回一個express服務器對象
const path=require("path");

//引入自己的路由模塊
const route=require("./routes/indexRouter");
// 引入處理post數(shù)據的模塊
const bodyParser = require("body-parser");

//---express 配置
//2.日志模塊:記錄每次請求信息蒜埋,并在調試臺看到
app.use(logger("dev"));//調用日志,配置為dev模式

//使用處理post請求的模塊
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

// 使用自己定義的路由模塊
app.use(route);

//1.設置靜態(tài)資源路徑
app.use(express.static(__dirname+"/public"));//__dirname 指向當前文件的根目錄

app.set("port",9999);//設置端口
app.listen(9999,()=>{
    console.log("服務器已啟動"+app.get("port"));
});

三最楷、配置模塊
1整份、在config文件夾里新建一個dbpoolconfig.js(文件名自定義)頁面建立數(shù)據庫連接池
需要下載mysql模塊:npm install mysql --save

const mysql=require("mysql");
const dbpool={
    pool:{},
    config:{// 創(chuàng)建連接池需要用到的參數(shù)
        host:"localhost",//主機地址
        port:"3306",//端口
        user:"root",//用戶名
        password:"root",//密碼
        database:"studentsystem"http:// 數(shù)據庫名稱
    },
    create(){
        // console.log("創(chuàng)建連接池");
        this.pool=mysql.createPool(this.config)// 創(chuàng)建連接池
    },
    connect(sql,arr,fn){
        this.pool.getConnection((err,connection)=>{
            /*發(fā)起query數(shù)據庫語局
           * 1.SQL語局句
           * 2.sql參數(shù)
           * 3.回調函數(shù),執(zhí)行完sql語句后調用籽孙,把結果注入在回調函數(shù)的參數(shù)里面烈评,做出響應*/
            connection.query(sql,arr,fn);
            // 釋放連接
            connection.release();
        })
    }
};
dbpool.create();
//公開配置
module.exports=dbpool;

2、在config文件夾里新建一個uploadconfig.js(文件名自定義)頁面配置 文件上傳模塊
需要下載multer模塊:npm install multer --save

const multer=require("multer"); // 引入multer模塊

//文件上傳模塊的配置
const storage=multer.diskStorage({
    destination:function (req,file,cb) {
        console.log(file);
        cb(null,"./public/uploads");// 保存上傳的文件的路勁
    },
    filename:function (req,file,cb) {
        // console.log(file);
        let fileFormat=(file.originalname).split(".");
        // 保存上傳的文件的名稱
        cb(null,fileFormat[0]+"-"+Date.now()+"."+fileFormat[fileFormat.length-1]);
    }
});
//將配置匹配給multer對象
const upload=multer({
    storage:storage
});
//公開配置
module.exports=upload;

四犯建、路由模塊routes文件下indexRouter.js(文件名自定義)

const express=require("express");
const path=require("path");

// 引入路由模塊
const uploadController=require("../controller/uploadController");

// 調用express對象的路由方法來獲取路由對象
const router=express.Router();

// 引入處理文件上傳的模塊
const upload=require("../config/uploadconfig");

//=======================路由攔截=============================

// 單文件上傳
router.post("/uploadFile.do",upload.single("myFile"),uploadController.uploadFile);

// 多文件上傳
router.post("/uploadFiles.do",upload.array("myFiles"),uploadController.uploadFiles);
// 公開路由模塊
module.exports=router;

五讲冠、controller控制層:uploadController.js(文件名自定義)

const dbpool=require("../config/dbpoolconfig"); // 引入連接池配置文件
const fileController={
    uploadFile(req,resp){// 單文件上傳
        // console.log(req.file.filename);
        let pathname="uploads/"+req.file.filename;// 路徑名
        let fileName=(req.file.originalname).split(".")[0]; // 文件名
        dbpool.connect("insert into t_url values (?,?,?)", // mysql語句,存入數(shù)據庫
            [null,fileName,pathname],// 數(shù)據庫中t_url表格有三列适瓦,第一列為自增竿开,所以寫null
            (err,data)=>{
                if(!err){
                    resp.send("上傳成功!");
                }
            })
    },
    uploadFiles(req,resp){// 多文件上傳
        console.log(req);
        for(let i = 0; i < req.files.length; i ++) {
            let pathname = "uploads/" + req.files[i].filename;// 路徑名
            let fileName = (req.files[i].originalname).split(".")[0];// 文件名
            dbpool.connect("insert into t_url values (?,?,?)", // mysql語句玻熙,存入數(shù)據庫
                [null, fileName, pathname],// 數(shù)據庫中t_url表格有三列否彩,第一列為自增,所以寫null
                (err, data) => {
                    console.log(data);
                    // console.log(err);
                    if (!err) {
                        if (i==req.files.length-1){
                            resp.send("上傳成功嗦随!");
                        }
                    }
                })
        }
    }
};
module.exports=fileController;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末列荔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贴浙,老刑警劉巖砂吞,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悬而,居然都是意外死亡呜舒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門笨奠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袭蝗,“玉大人,你說我怎么就攤上這事般婆〉叫龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵蔚袍,是天一觀的道長乡范。 經常有香客問我,道長啤咽,這世上最難降的妖魔是什么晋辆? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宇整,結果婚禮上瓶佳,老公的妹妹穿的比我還像新娘。我一直安慰自己鳞青,他們只是感情好霸饲,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臂拓,像睡著了一般厚脉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胶惰,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天傻工,我揣著相機與錄音,去河邊找鬼童番。 笑死精钮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的剃斧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忽你,長吁一口氣:“原來是場噩夢啊……” “哼幼东!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤根蟹,失蹤者是張志新(化名)和其女友劉穎脓杉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體简逮,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡球散,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了散庶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉堰。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悲龟,靈堂內的尸體忽然破棺而出屋讶,到底是詐尸還是另有隱情,我是刑警寧澤须教,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布皿渗,位于F島的核電站,受9級特大地震影響轻腺,放射性物質發(fā)生泄漏乐疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一贬养、第九天 我趴在偏房一處隱蔽的房頂上張望挤土。 院中可真熱鬧,春花似錦煤蚌、人聲如沸耕挨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒占。三九已至,卻和暖如春蜘犁,著一層夾襖步出監(jiān)牢的瞬間翰苫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工这橙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奏窑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓屈扎,卻偏偏與公主長得像埃唯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹰晨,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354