文件MultipartFile上传同时,接收复杂参数
方案一MultipartFile和dto分开
@PostMapping("/uploadData")
public Result<Object> uploadData(@RequestParam("file") MultipartFile file,@RequestPart() DataDTO dataDTO) {// 处理文件上传逻辑,如保存文件到本地或云存储// 处理接收到的 DTO 对象逻辑,并进行业务处理return ResponseEntity.ok("File uploaded and DTO object received successfully");
}
SpringBoot文件上传同时,接收复杂参数
方案二MultipartFile放入dto中
dto类
@Data
public class MetaDataDTO {/*** 主键id*/private Integer id;/*** 关联数据类型id*/protected Integer metadataTypeId;/*** 数据名称*/private String dataName;/*** 描述*/private String description;/*** 共享级别*/private String sharingLevel;/*** 数据图片*/MultipartFile dataPic;
}
controller类
/*** 新增或修改*/
@PostMapping("/saveData")
public Result<Object> saveData(@Validated MetaDataDTO metaDataDTO) {return dataService.saveData(metaDataDTO);
}
service实现类
@Service
public class DataServiceImpl implements DataService {@Overridepublic Result<Object> saveData(MetaDataDTO metaDataDTO) {// * * * * * * * * * * * * * * * * * * * * * * * * * *//// 上传图片 //// * * * * * * * * * * * * * * * * * * * * * * * * * *////必须上传图片if (metaDataDTO.getDataPic() == null) {return Result.error(CodeMsg.META_DATA_PIC_NOT_EXIST);}// 检查文件大小if (metaDataDTO.getDataPic().getSize() > 1 * 1024 * 1024) { // 1MBreturn Result.error(CodeMsg.FILE_SIZE_TOO_LARGE);}// 检查文件类型if (!ImageUtil.isImageFile(metaDataDTO.getDataPic())) {return Result.error(CodeMsg.FILE_FORMAT_NOT_PIC);}}
}
判断文件是否是图片工具类
public class ImageUtil {/*** 判断文件是否为图片*/public static boolean isImageFile(MultipartFile file) {if (file != null && !file.isEmpty()) {Tika tika = new Tika();try {String fileType = tika.detect(file.getInputStream());if (fileType.startsWith("image/")) {// 是图片类型return true;} else {// 非图片类型return false;}} catch (IOException e) {// 处理异常情况}} else {// 未上传文件return false;}return false;}/*** 图片保存至服务器指定目录,返回访问路径*/public static String savePhotoAndGetPath(String basePath, String detailPath, MultipartFile file) {InputStream inputStream = null;FileOutputStream fileOutputStream = null;try {String filename = file.getOriginalFilename();//"/data/static/dataSharingStatic/idCard/"String directoryPath = basePath + detailPath;File dir = new File(directoryPath);if (!dir.exists()) {boolean mkdirs = dir.mkdirs();}inputStream = file.getInputStream();String filePath = directoryPath + filename;fileOutputStream = new FileOutputStream(filePath);IOUtils.copy(inputStream, fileOutputStream);fileOutputStream.flush();return detailPath + filename;} catch (IOException ex) {ex.printStackTrace();return null;} finally {try {if (inputStream != null) {inputStream.close();}if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException ex) {ex.printStackTrace();}}}
}
相关文章:
文件MultipartFile上传同时,接收复杂参数
方案一MultipartFile和dto分开 PostMapping("/uploadData") public Result<Object> uploadData(RequestParam("file") MultipartFile file,RequestPart() DataDTO dataDTO) {// 处理文件上传逻辑,如保存文件到本地或云存储// 处理接收到…...
Nginx 获取当前机器IP- Protocol- Port
Full Example Configuration | NGINX Alphabetical index of variables $server_addr:当前nginx所部署的机器 $server_port:当前监听的port server {listen 12345 udp;return ‘$server_addr:$server_port; } 参数说明示例$remote_addr$remote_user$…...
Unity丨自动巡航丨自动寻路丨NPC丨
文章目录 概要功能展示技术细节小结 概要 提示:这里可以添加技术概要 本文功能是制作一个简单的自动巡逻的NPC,随机自动寻路。 功能展示 技术细节 using UnityEngine;public class NPCController : MonoBehaviour {public float moveSpeed 5.0f; // …...
Mysql002:(库和表)操作SQL语句
目录: 》SQL通用规则说明 SQL分类: 》DDL(数据定义:用于操作数据库、表、字段) 》DML(数据编辑:用于对表中的数据进行增删改) 》DQL(数据查询:用于对表中的数…...
排水管网液位监测,排水管网液位监测方法
排水管网是城市生命线基础设施的重要组成部分,它的正常运行直接关系到城市的洪水防治、环境保护和居民生活质量。对排水管网液位进行实时监测对管理和维护排水系统稳定运行具有重要作用。那么如何对监测排水管网液位呢?本文将着重为大家详细介绍排水管网液位监测方…...
ansible的个人笔记使用记录
1.shell模块使用,shell模块------执行命令,支持特殊符 ansible all -m shell -a yum -y install nginx ansible all -m shell -a systemctl restart nginx ansible all -m shell -a systemctl stop nginx && yum -y remove nginx2. file模块…...
OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(7)聊天机器人 / ChatBot
聊天机器人 / ChatBot 使用大型语言模型来构建你的自定义聊天机器人 在本视频中,你将学习使用OpenAI ChatCompletions格式的组件构建一个机器人。 环境准备 首先,我们将像往常一样设置OpenAI Python包。 import os import openai from dotenv import…...
公司监控员工电脑用什么软件?应该怎么选?
在当今的数字化时代,企业需要对其员工的活动进行适当的监控,以确保企业的信息安全,维护企业的正常运作,并且保证员工的工作效率。然而,如何在尊重员工隐私权的同时,实现这一目标,却是一个挑战。…...
探索创意的新辅助,AI与作家的完美合作
在现代社会,文学创作一直是人类精神活动中的重要一环。从古典文学到现代小说,从诗歌到戏剧,作家们以他们的独特视角和文学天赋为我们展示了丰富多彩的人生世界。而近年来,人工智能技术的快速发展已经渗透到各行各业,文…...
计算机类软件方向适合参加的比赛
前言 博主是一名计算机专业的大三学生,在校时候参加了很多比赛和训练营,现在给大家博主参加过的几个的比赛,希望能给大一大二的学生提供一点建议。 正文 最近也有比赛的,我会从时间线上来给大家推荐一些比赛,并且给…...
win11、win10使用python代码打开和关闭wifi热点的正确方法
问题一 win10、win11,可以在任务栏的WIFI图标启动移动热点,但是无法设置SSID和密码。在网上搜索好久,无解。 万能的网络解决不了,只能自己动手解决了。 问题二 我当前的WiFi驱动程序不支持承载网络,如果我输入netsh…...
spark的数据扩展
会导致数据扩展的操作; 如何避免数据扩展; 一 countDistinct操作 1. 扩展原因 Spark的count distinct操作可能会导致数据扩展的原因是,它需要在执行操作之前对所有不同的值 进行分组。这意味着Spark需要将所有数据加载到内存中,并将其按照不同的值进行…...
前后端分离-图书价格排序案例、后端返回图片地址显示在组件上(打印图片地址)
前后端分离之图书价格排序案例,之后端返回图片地址显示在组件上 注意:分别建前后端项目,前端项目只写前端代码,后端项目只写后端代码1 图书后端 1.1 图书后端之建表 1.2 图书后端之序列化类 1.3 图书后端之视图类 1.4 图书后端之…...
Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF
论文概述 学习这个RRTF之前,可以先学习一下RLHF。 顺带一提:eosphoros-ai组织「DB-GPT开发者」最新有个新项目Awesome-Text2SQL:GitHub - eosphoros-ai/Awesome-Text2SQL: Curated tutorials and resources for Large Language Models, Text2…...
C语言中常见的面试题
解释C语言中的基本数据类型,并举例说明它们的用法和限制。描述C语言中的变量和常量的定义方法,以及它们的作用和区别。解释C语言中的数组和字符串,并说明它们的定义方法和使用注意事项。描述C语言中的循环结构和控制语句,并举例说明它们的用法和限制。解释C语言中的函数和函…...
协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec
SSL的位置-思维导图 参考来源: 华为培训ppt:HCSCE122_SSL VPN技术 ##SSL的位置 SSL协议套件 握手阶段,完成验证,协商出密码套件,进而生成对称密钥,用于后续的加密通信。 加密通信阶段,数据由对…...
M1/M2芯片Parallels Desktop 19安装使用教程(超详细)
引言 在Window上VMware最强,在Mac上毫无疑问Parallels Desktop为最强! 今天带来的是最新版Parallels Desktop 19的安装使用教程。 1. 下载安装包 Parallels Desktop 19安装包:https://www.aliyundrive.com/s/ThB8Fs6D3AD Parallels Deskto…...
外包干了3个月,技术退步明显。。。。。
先说一下自己的情况,大专生,17年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
顺风车软件搭建流程:数字化出行与社会共享的创新
随着移动互联网的快速发展,顺风车软件作为一种新型出行方式逐渐流行起来。本文将介绍顺风车软件搭建的流程,包括需求分析、技术架构设计、用户体验优化以及安全性保障。通过深入思考数字化出行与社会共享的关系,为读者呈现一个专业、有逻辑性…...
2023-09-26 LeetCode每日一题(递枕头)
2023-09-26每日一题 一、题目编号 2582. 递枕头二、题目链接 点击跳转到题目位置 三、题目描述 n 个人站成一排,按从 1 到 n 编号。 最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
