multer和formdata的踩坑

Posted shaolingyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于multer和formdata的踩坑的主要内容,如果未能解决你的问题,请参考以下文章

dispatch_group的踩坑

我的踩坑之旅-代码不规范引发的“bug”

数据同步 相关的踩坑记录

.md文件上传视频的踩坑经历小记

安装和配置MySQL的踩坑记录

安装和配置MySQL的踩坑记录