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

本文介绍了一个使用HTML和Express.js实现的多字段文件上传案例,包括前端页面搭建、多文件选择与提交,以及后端通过Multer中间件处理不同字段名的文件上传请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值