express+multer实现简单的文件上传功能

news2024/12/29 4:28:50

express+multer实现简单的文件上传功能

1.安装multer和uuid依赖

cnpm install -S uuid multer

2.添加multer的配置文件

在config文件夹下添加uploa.js文件,内容如下:

// 引入multer
const multer = require('multer')
// uuid : 用于生成不重复的由英文组成的字符串, 适合做文件的唯一名称
const uuid = require('uuid')
// 磁盘存储引擎,可以控制文件的存储,省略的话这些文件会保存在内存中,不会写入磁盘
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 控制文件的存储路径
    // 在上传前要在项目的根目录下创建对应文件夹用于接收上传的文件(public文件夹下创建avatar文件夹)
    cb(null, 'public/avatar')
  },
  filename: function (req, file, cb) {
    // 读取上传的文件名
    const { originalname } = file
    // 截取文件后缀
    const i = originalname.lastIndexOf('.')
    // 文件后缀
    const ext = originalname.substring(i)
    // 生成唯一名称
    const unique_name = uuid.v4() + ext
    //定义上传文件存储时的文件名
    cb(null, unique_name)
  }
})
const upload = multer({ storage: storage })
module.exports = upload

3. 在路由文件中引入

const upload = require('../config/upload')

// upload.single('avatarfile') :接受单文件上传,avatarfile代表上传文件时的参数字段
// upload.array(fieldname[, maxCount]) :接受多文件上传,maxCount来限制最大的上传数量
router.post('/profile/avatar', upload.single('avatarfile'), user.avatarUpload)
// 用户类
class User {
  // 用户头像上传
  avatarUpload(req, res) {
    const avatarUrl = `http://127.0.0.1:3007/${req.file.destination.split('/')[1]}/${req.file.filename}`
    res.send({
      code: 200,
      msg: '成功',
      data: {
        filename: req.file.filename,
        fileUrl: avatarUrl
      }
    })
  }
}

在app.js文件中搭建静态文件服务

// 搭建静态文件服务
app.use(express.static(path.join(__dirname, 'public')));

效果图

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

参考地址

  • 链接1
  • 链接2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第20 章 多线程

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Threa…

BTCPay Server:免费、安全、开源的比特币支付处理器 | 开源日报 No.90

MunGell/awesome-for-beginners Stars: 58.0k License: NOASSERTION 这个项目是一个收集开源项目的列表,旨在帮助初学者找到可以贡献代码的机会。该列表按编程语言分类,并列出了每个项目以及其标签 (如 “good-first-issue”、“beginner” 等)。主要功…

宇宙中可能存在的另外一种生命体-硅基生命

本文提到的所有图片有燧原曜图平台生成提供 概念 碳基:生命的组织架构由碳元素组成(地球的生命)硅基:生命的组织架构由硅元素组成 引言 费米悖论 中提到有存在外星文明的可能,但它们迄今为止还无法和我们接触三体人…

【Java】文件路径-绝对路径与相对路径

1、绝对路径与相对路径 先来看一下绝对路径和相对路径的定义: 绝对路径是指完整的描述文件位置的路径就是绝对路径。如Windows系统中的D:\Project\data\test.txt,MAC系统中的/Users/liuwenwen/Desktop/Project/test.txt 相对路径是指相对于当前文件位置…

nodejs最新电商jd m端h5st 4.2签名算法4.2版本逆向,jd API接口,jd商品数据采集

前言: jd m端使用最新的h5st 4.2签名算法,与h5st 4.1版本有很大的不同。在这儿分析一下,供大家参考。 一、目标地址(Base64解码) aHR0cHM6Ly9zby5tLmpkLmNvbS93YXJlL3NlYXJjaC5hY3Rpb24/a2V5d29yZD0lRTklOTklQTQlRTYlQjklQkYlRTYlOUMlQkEmc2…

云性能监控的关键组成部分

云性能监控是确保云服务稳定运行的不可或缺的一环。通过实时可见性、资源优化和快速故障排除,企业可以最大程度地利用云服务的优势,提高业务的可用性和效率。采用综合的监控策略和最佳实践,企业可以更好地应对日益复杂和变化的云环境&#xf…

最强Oracle 19c OCM考试错题解析

参加过Oracle 19c OCM考试的学员都知道,OCM考试结束后会告诉考生考试成绩是多少分,但并不会告诉考生哪道题做错了,就考试问题,姚远老师会总结一些文章出来,欢迎关注。 最近姚远老师在OCM的授课中发现了一道题目&#x…

1-2、计算机组成

语雀原文链接 文章目录 1、计算机组成1-1、主板1-2、接口卡1-3、存储器(内存) 2、存储器2-1、存储器的重要性2-2、物理存储器2-3、逻辑存储器2-4、内存地址空间的分段2-5、存储单元2-6、指令和数据 3、总线3-1、三类总线3-2、CPU读数据例子3-3、CPU写数…

SVG图片选择库组件封装及使用

需求 需求: 在项目中通常需要做菜单管理,想要让左侧菜单好看一点,一般都会选择添加图标,需要自定义选择喜欢的图标,得提供一个有选择项的图标库 延伸需求:在项目中通常可能有好几个图标选择库,可…

【星火大模型】api使用

讯飞星火官方首页 准备工作 注册讯飞星火账号申请开发者api试用 从一个demo开始 讯飞星火官方的程序员为我们提供了非常优秀的demo,基本涵盖了大多数常用语言。 demo下载链接 这里我选用Java带上下文调用示例 下载后可以看到这是一个idea项目,直接…

最佳实践-使用RKE快速部署高可用k8s集群

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 Rancher Kubernetes Engine(RKE)是一个用于部署、管理和运行Kubernetes集群的开源工具。旨在简化Kubernetes集群的部署和操作。 RKE具有以下特点和功能&…

Linux学习笔记09、Shell命令之历史命令和自动补全

上一篇:Linux学习笔记08、Shell命令之常用命令缩写及全称 目录 1、历史命令: 1.1、查看所有历史命令列表: 1.2、查看指定历史命令: 1.3、清除历史命令: 2、自动补全 2.1、当字符串唯一时: 2.2、当有多个…

一个00后女生在csdn创作1095的创作纪念日

大家好,我是你们熟悉的微枫奶糖 肥晨,今天收到私信,突然发现,我来到CSDN已经1095天了。让我来分享一下吧~ 机缘 不知不觉来csdn已经1095天了,祝贺我在CSDN的创作纪念日! 这是一个非常值得纪念的日子&…

初识PO模式并在Selenium中简单实践

初识PO模式 PO(PageObject)是一种设计模式。简单来说就是把一些繁琐的定位方法、元素操作方式等封装到类中,通过类与类之间的调用完成特定操作。 PO被认为是自动化测试项目开发实践的最佳设计模式之一。 在学习PO模式前,可以先…

HeteroTiC: 基于异构时间通道的鲁棒网络流水印

文章信息 论文题目:HeteroTiC: A robust network flow watermarking based on heterogeneous time channels 期刊(会议):Computer Networks 时间:2022 级别:CCF B 文章链接:https://doi.org/10…

堆在排序中的应用

堆排序 1、堆排序原理 堆排序是利用到了堆这种数据结构,我们首先回顾一下二叉堆的特性: 最大堆的堆顶是整个堆中的最大元素。最小堆的堆顶是整个堆中的最小元素。 以最大堆为例,如果删除一个最大堆的堆顶(并不是完全删除&…

YOLOv5改进之ShuffleNetV2

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5 一、原理

关于神经网络,你不得不知的三大要点

什么是神经网络? 神经网络是一个具有相连节点层的计算模型,其分层结构与大脑中的神经元网络结构相似。神经网络可通过数据进行学习,因此,可训练其识别模式、对数据分类和预测未来事件。 神经网络将您的输入细分为多个抽象层。比…

班级管理经验分享

班级管理经验如同作战策略,需要不断摸索和实践。以下是我结合自身经历,总结出的一些班级管理经验,与大家分享。 一、了解学生 作为班主任,首先要了解每个学生的性格、爱好、学习情况、家庭背景等。这需要我们与学生建立良好的沟通…

C++——取地址和自增运算

今天做了道题一下给我整蒙了,把实验探索发篇文章,题目如下: int a[]{10,11,12},*p&a[0];执行完*p;*p1;后a[0],a[1],a[2]的值各为多少 答案是 10, 12, 12怎么理解*p,*p1呢,我觉得可以用汉语把代码读一下,p&#xf…