multer和formdata的踩坑


閑的無聊發現以前沒玩過上傳文件的功能,所以打算試一試

首先百度了准備了一哈知識,用到了input的file,FormData,node的中間件multer和express;

首先簡單寫了兩html

<button id="sub" onclick="subbtn(this)">submit</button>
<input type="file" name="" id="file">

 

 然后就是Ajax獲取文件了,使用的是FormData,

let formData = new FormData();
通過formdata的append添加文件,這里是key-value形式的,就是
formData.append('file',fil.files[0]);的形式,第一個是名稱,自己隨便取,第二個是獲取的變量,可以通過獲取inout的id,然后用files獲取文件,files好像是一個數組或者集合形式,這里懶得去看了所以可以遍歷獲取或者通過下標獲取想要的
因為我寫的是post,所以這里就是用ajax的post方法去傳文件,但是這里需要注意的是,不要寫setRequestHeader,在這里我卡了好久,一直顯示獲取的是underfind,其他都是正常了

然后是node這邊了,npm安裝一哈express和multer,反正就是npm i express multer了,這里可以去github上看一下multer,有中文介紹版
首先引入const multer = require('multer');
然后文檔上說
var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }) var upload = multer({ storage: storage })
destination是設置文件上傳存儲位置,
filename是這是文件名的
然后做了點修改,如果不變的話,
file.fieldname會是file-sdhfhsdfkjhsdkf一堆什么的,並且沒有擴展名
所以將filename做了修改為
filename: function (req, file, cb) {
      cb(null, file.originalname)
    }
這樣存儲的文件就是有擴展名的文件
post就是
app.post('/getfile',upload.any(),function(req,res) {
    console.log(req.files)
    res.json("收到")
})
想要看收到的文件的話,any在req.files,single則在req.file
github鏈接https://github.com/expressjs/multer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM