1. 程式人生 > 實用技巧 >nodejs 之express 檔案上傳

nodejs 之express 檔案上傳

      使用中介軟體multer管理上傳檔案multer 接受 form-data編碼資料,所有要求前端攜帶時注意一下,如:<input type=file enctype="multipart/form-data" name="fieldname",上傳儲存的檔名隨機並且沒有副檔名。

使用方法 

  //1 引入
  let multer = require('multer');
  //2 例項化
  let objMulter = multer({ dest: './upload' }); //dest: 指定 儲存位置(存到伺服器)
  //安裝中介軟體,
  app.use(objMulter.any()); //允許上傳什麼型別檔案,any 代表任何型別

    app.get('/reg',(req,res)=>{
    req.files
    })

    req.files是一個數組,每一個上傳的檔案有如下描述

fieldname:表單name名
originalname:上傳的檔名
encoding:編碼方式
mimetype:檔案型別
buffer:檔案本身
size:尺寸
destination:儲存路徑
filename:儲存後的檔名不含字尾
path:儲存磁碟路徑+儲存後的檔名不含字尾 可以使用fs模組修改檔名     letoldname=req.files[i].path; letnewname=oldname+path.parse(req.files[i].originalname).ext; fs.renameSync(oldname,newname); path模組用來解析路徑

    path.parse('c:\\wamp\\xx.png') // string -> object

      {
        root: 'c:\\', 碟符
        dir: 'c:\\wamp', 目錄
        base: 'xx.png', 檔名
        ext: '.png', 副檔名
        name: 'xx' 檔案,不含副檔名
      }

    path.join('磁碟路徑1','磁碟路徑2','磁碟路徑n')//合併片段     path.resolve('磁碟路徑1','磁碟路徑n') //合併磁碟片段,右到左找根,左到右拼接,沒有找到根,以當前檔案路徑為根     __dirname 全域性變數 返回當前檔案所在的磁碟路徑
let express=require('express');
let multer
=require('multer') let app=express(); let fs=require('fs'); const path=require('path'); app.listen(7755,console.log("啟動服務")); app.use(express.static('./public')) let objMulter=multer({dest:'./public/upload'}) app.use(objMulter.any()); // let str1='~public\\upload\\a37fc3aa270700ecbd858d8fc7485c02.png' // let str2='c:/sss/\aa//d.ff' // let str3='' // console.log(path.parse(str1)); // console.log(path.parse(str2)); // console.log(path.join(str1,str2,str3)) // console.log(path.resolve(str2)) app.get('/api',(req,res,next)=>{ try { let urllist=[]; for(i=0;i<req.files.length;i++){ let oldname=req.files[i].path; let newname=oldname+path.parse(req.files[i].originalname).ext; fs.renameSync(oldname,newname); let url="http://localhost:7755/upload/"+req.files[i].filename+path.parse(req.files[i].originalname).ext urllist.push(url); } res.send({err:0,url:urllist}) } catch (error) { console.log(error) } })