node接收前端上传的图片,单文件、多文件同name、多文件不同name

简介: 本文介绍了在Node.js中使用multer模块接收前端上传的图片,包括单文件上传、多文件上传(同name和不同name)以及任意类型文件上传的方法。

使用模块:multer

npm  i  multer

使用

var multer = require('multer')
// 指定上传的文件路径  //这里是当前文件平级的public/images
var upload = multer({
    dest: path.join(__dirname, 'public', 'images') });

单文件接收: req.file对象接受文件或者图片对象

 multer(options).single(myfiles)

传单个文件内容,如一次只上传一张图片。myfiles为上传时文件的字段名称。
options 是multer的属性 {dest:xxxx}

前端代码:

 let fora1 = new FormData()
        fora1.append('files', this.state.form.file)
        axios.post('user/postPto', fora1, {
   
            headers: {
   
                "Content-Type": "multipart/form-data "
            }
        }).then(res => {
   
            console.log(res, 'res');
            let {
    data } = res.data.data
            alert(data)
        })

简略

//提交单个文件  formdata 里面字段是myfiles的对象
router.post('/postPto', upload.single('myfiles'), (req, res) => {
   
    console.log("=========================================");
    console.log("=========================================");
    let fileObj = req.file;
    console.log('fileObj.myfiles', fileObj);
    res.send(endMassage({
    data: "信息插入成功", fileObj }))
})

详细

//提交用户照片  single  与前端form'da'ta中的字段名相匹配才行  只能是单个文件上传使用
router.post('/postPto', upload.single('files'), (req, res) => {
   
    console.log("=========================================");
    var fileObj = req.file;
    console.log('fileObj', fileObj);
    let imgUrl = fileObj.filename + '.'+ fileObj.originalname.split('.')[1]
    // fileObj {
   
    //     fieldname: 'files',
    //     originalname: 'WIN_20210318_08_34_14_Pro.jpg',
    //     encoding: '7bit',
    //     mimetype: 'image/jpeg',
    //     destination: 'E:\\uxiao.zjqfyy.shop\\myExpressDome\\myExpressDome\\routes\\indexR\\public\\image',
    //     filename: '5f21c2b4328eff34204d439741ebd957',
    //     path: 'E:\\uxiao.zjqfyy.shop\\myExpressDome\\myExpressDome\\routes\\indexR\\public\\image\\5f21c2b4328eff34204d439741ebd957',
    //     size: 124092
    // }
    //读取文件内容
    // var content = fileObj['files'][0].buffer.toString();
    // fs.
    // console.log(content, "content");
    // let fileUrl = '/imges' + file['file'][0].originalname
    res.send(endMassage({
    data: "信息插入成功", imgUrl}))
})

在这里插入图片描述
在这里插入图片描述

多文件接收: req.files 是传来的文件数组

multer(options).array(fieldname[,maxCount])
//一次最多上传3个文件
let upload=multer({
   dest:"public/images"}).array("myfiles",3);

适用于同一个字段,一次上传多个文件的情况,例如发状态时,选择多张图片发送。接受一个以 fieldname 命名的文件数组。可以指定maxCount 来限制上传的最大数量。这些文件的信息保存在 req.files。我下面的例子是使用的myfiles字段,最大接受文件数量10.

前端代码:

  let fora1 = new FormData()
        fora1.append('myfiles', file)
        fora1.append('myfiles', file)
        fora1.append('myfiles', file)

        axios.post('user/postPtoList', fora1, {
   
            headers: {
   
                "Content-Type": "multipart/form-data "
            }
        }).then(res => {
   
            console.log(res, 'res');
            let {
    data } = res.data.data
            alert(data)
        })
var fs = require('fs')
var multer = require('multer')
//设置保存的路径  dest  
var upload = multer({
    dest:"public/images" })
//提交用户多个照片 formdata 里面字段是myfiles的数组
router.post('/postPto', upload.array('myfiles', 10), (req, res) => {
   
    console.log("=========================================");
    console.log("=========================================");
    let fileObj = req.files;
    console.log('fileObj', fileObj);
    let urlList = fileObj.map(i => {
   
        let oldname = i.path  //获取path: 'public\\upload\\0f625978d5d1a783b12e149718f8b634',
        let newname = i.path + i.originalname //.jpg
        fs.renameSync(oldname, newname)//将老的文件名改成新的有后缀的文件 #同步写法
        return i.originalname
    })
    res.send(endMassage({
    data: "信息插入成功", urlList }))
})

在这里插入图片描述
使用fs模块将上传的文件重命名。
在这里插入图片描述
接受多文件,有不同name标识的 req.files 是传来的文件数组

multer(options).fields(fields)

适用于上传多个字段的情况。接受指定 fields 的混合文件。这些文件的信息保存在 req.files。fields 是一个对象数组,具有 name 和可选的 maxCount 属性。

let fieldsList=[
    {
   name:"myfiles1"},
    {
   name:"myfiles2",maxCount:2}
]
let upload=multer({
   dest:"public/images"}).fields(fieldsList);

接收任意类型的文件,接收一切上传的文件。

let upload=multer({
   dest:"public/images"}).any();

本文只是介绍了常用的几个方法,包括单文件,多文件同name,多文件不同name,任意文件,

学习参考了这位老师的博文:

https://blog.csdn.net/Charissa2017/article/details/105207422

目录
相关文章
分享:根据批量的图片文件名,如何在电脑里一次性查找多张图片,复制并保存到新的文件夹
本文介绍了一款批量文件处理软件,用于快速查找和管理大量图片。通过下载链接提供软件,用户可执行以下操作:搜索并复制特定文件名的图片,从大型图库中筛选目标图片至指定位置,或按文件名批量删除图片。软件支持完全匹配、模糊查找和格式限定等查找方式。使用后能显著提升图片整理效率,节省时间。
|
4月前
如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)
该文介绍了一个工具的使用方法,用于忽略文件夹结构并合并所有图片。首先,提供了两个下载链接:百度网盘(提取码:qwu2)和蓝奏云(提取码:2r1z)。接着,展示了文件夹内的嵌套结构,包含多层文件夹和兔兔图片。通过打开工具,选择文件批量复制功能,勾选“忽略文件夹结构”和“不存在自动创建”,然后将目标文件夹“1”添加到来源路径。点击开始复制,并在需要时选择打包和删除原文件,最终会得到一个包含所有图片的压缩包。
|
4月前
|
Windows
推荐:如何批量根据PDF文件名批量查找PDF文件,复制到指定地方保存,通过文件名批量复制文件,按照文件名批量复制文件,根据文件名批量提取文件
该文介绍了一个批量查找PDF文件(不限于找PDF)的工具,用于在多级文件夹中快速查找并复制特定文件。通过下载提供的软件,用户可以加载PDF库,输入文件名列表,设置操作参数(如保存路径、复制或删除)及搜索模式。软件能高效执行,例如在1.1秒内完成对数千文件中的37个目标文件的复制,显著提升了工作效率,避免了手动逐个查找和复制的繁琐。
合并多个文件的内容到一个文件
合并多个文件的内容到一个文件
|
4月前
|
存储 定位技术 Python
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
|
4月前
|
前端开发 JavaScript
前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件
前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件
|
9月前
将PC微信本地文件从MsgAttach文件夹转移回原先的File文件夹-更加智能
微信做了啥我不想多说了,如果你觉得目录难找,可以使用我的程序 这是我对网上程序的更改,因为有长达2个月的附件,进行了2个月的归档,网上只能全迁移到6月份文件夹,我觉得不爽
117 0
|
存储 Java
Java实现文件上传到本地(自定义保存路径)
Java实现文件上传到本地(自定义保存路径)
741 0
|
JavaScript
Node.js——文件模块和路径模块(读写文件,处理路径)
Node.js——文件模块和路径模块(读写文件,处理路径)
178 0
|
前端开发
关于上传多文件的一些记录
关于上传多文件的一些记录
66 0