express + multer 实现文件上传(三)-- 多字段名上传

了解了前面的一、二后看一下多字段上传

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div>
        <input type="file" name="" id="avatar" multiple>
    </div>
    <div>
        <input type="file" name="" id="gallery" multiple>
    </div>
    <div>
        <button class="submit">上传</button>
    </div>

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script>
    $('.submit').on('click', function(){
        var avatarList = $('#avatar')[0].files,
        galleryList = $('#gallery')[0].files;

        var formData = new FormData();

        for(let i = 0;i<avatarList.length;i++){
            formData.append('avatar', avatarList[i]);
        }

        for(let j = 0;j<galleryList.length;j++){
            formData.append('gallery', galleryList[j]);
        }

        $.ajax({
            url: '/upload/fields',
            type:'post',
            processData:false,
            contentType:false,
            data: formData,
            success: function(data){
                console.log(data)
            }
        })

    });
    </script>
</body>

</html>

upload.js

const express = require('express');
const router = express.Router();
const multer = require('multer');
 
let upload = multer({
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, './uploads/');
        },
        filename: function (req, file, cb) {
            var changedName = (new Date().getTime())+'-'+file.originalname;
            cb(null, changedName);
        }
    })
});
 
//多字段名上传
let multipleFields = upload.fields([
    {name:'avatar', maxCount:3},
    {name:'gallery', maxCount:3}
]);
router.post('/fields', (req,res)=>{
    multipleFields(req,res,(err) => {
        console.log(req.files);
        if(!!err){
            console.log(err.message);
            res.json({
                code: '2000',
                type: 'field',
                msg:err.message
            })
            return;
        }
        var fileList = [];
        for(let item in req.files){
            var fieldItem = req.files[item];
            fieldItem.map((elem) => {
                fileList.push({
                    fieldname: elem.fieldname,
                    originalname: elem.originalname
                })
            });
        }

        res.json({
            code: '0000',
            type: 'field',
            fileList: fileList,
            msg:''
        })
    });
});

 
module.exports = router;

到此为止,所有的multer文件上传demo完成了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vue 和 Node.js 环境下使用 Multer 实现图片上传,需要先安装 Multer。在 Node.js 端,可以使用以下命令进行安装: ``` npm install multer --save ``` 在 Vue 端,可以使用以下命令进行安装: ``` npm install axios --save ``` 接下来,需要在 Node.js 端创建一个 Multer 实例,用于处理上传的文件。可以使用以下代码: ```js const multer = require('multer'); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }) const upload = multer({ storage: storage }) ``` 上述代码中,`storage` 对象用于指定文件的存储路径和文件名。在本例中,将文件存储到 `uploads/` 文件夹下,并使用原始文件名作为文件名。 接下来,在 Node.js 端创建一个路由,用于处理图片上传请求。可以使用以下代码: ```js const express = require('express'); const router = express.Router(); router.post('/upload', upload.single('image'), (req, res) => { res.json({ image: req.file.filename }); }); module.exports = router; ``` 上述代码中,`/upload` 路由用于处理图片上传请求。`upload.single('image')` 中的 `'image'` 参数指定上传的文件字段名。在上传成功后,返回上传的文件名。 在 Vue 端,可以使用 Axios 发送图片上传请求。可以使用以下代码: ```js const formData = new FormData(); formData.append('image', file); axios.post('/api/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }).then(response => { console.log(response.data); }).catch(error => { console.log(error); }); ``` 上述代码中,`formData` 对象用于存储上传的文件。在发送请求时,需要将 `Content-Type` 头设置为 `multipart/form-data`,以便服务器能够正确解析请求。 以上就是在 Vue 和 Node.js 环境下使用 Multer 实现图片上传的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值