当前位置: 首页 > news >正文

文件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();}}}
}
http://www.lryc.cn/news/176014.html

相关文章:

  • Nginx 获取当前机器IP- Protocol- Port
  • Unity丨自动巡航丨自动寻路丨NPC丨
  • Mysql002:(库和表)操作SQL语句
  • 排水管网液位监测,排水管网液位监测方法
  • ansible的个人笔记使用记录
  • OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(7)聊天机器人 / ChatBot
  • 公司监控员工电脑用什么软件?应该怎么选?
  • 探索创意的新辅助,AI与作家的完美合作
  • 计算机类软件方向适合参加的比赛
  • win11、win10使用python代码打开和关闭wifi热点的正确方法
  • spark的数据扩展
  • 前后端分离-图书价格排序案例、后端返回图片地址显示在组件上(打印图片地址)
  • Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF
  • C语言中常见的面试题
  • 协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec
  • M1/M2芯片Parallels Desktop 19安装使用教程(超详细)
  • 外包干了3个月,技术退步明显。。。。。
  • 顺风车软件搭建流程:数字化出行与社会共享的创新
  • 2023-09-26 LeetCode每日一题(递枕头)
  • excell导入十万数据慢该如何解决
  • Python异步编程常见问题与解决
  • 77. 组合
  • vue项目开发环境工具-node
  • Python | 为FastAPI后端服务添加API Key认证(分别基于路径传参和header两种方式且swagger文档友好支持)
  • nodeJs+jwt实现小程序tonken鉴权
  • 更新andriod studio版本,项目编译报could not find org.junit.jupiter:junit-jupiter
  • 【慕伏白教程】 Linux 深度学习服务器配置指北
  • 学习windows系统让python脚本在后台运行的方法
  • 华为OD机试 - 第k个排列 - 全排列递归(Java 2023 B卷 100分)
  • 流媒体播放器EasyPlayer.js无法播放H.265的情况是什么原因?该如何解决?