尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java文件上传和其他参数一起提交的案例

Java文件上传和其他参数一起提交的案例
📅 发布时间:2026/6/18 15:36:23
Java文件上传和其他参数一起提交的案例

image

package cn.daenx.demo.controller;import cn.daenx.demo.Aoidj;
import cn.hutool.core.util.ObjectUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.List;/*** 文件上传的一些案例*/
@RestController
@RequestMapping("/test")
public class TestController {@PostMapping(value = "/02")@ResponseBodyprivate String req0122(@ModelAttribute Aoidj aoidj,@RequestPart(value = "files",required = false) List<MultipartFile> files) throws Exception {System.out.println(aoidj.getName());System.out.println(aoidj.getAge());//files或者aoidj.getFiles()都可以拿到值for (MultipartFile file : files) {BigDecimal fileSize = getFileSize(file, 2);if (fileSize.compareTo(new BigDecimal("50")) > 0) {throw new RuntimeException("文件大小最多支持50MB");}String fileName = file.getOriginalFilename();if (ObjectUtil.isEmpty(fileName)) {throw new RuntimeException("文件名为空");}String md5 = getMd5(file);String fileId = md5 + getPrefix(file);String FILE_PATH = "D:/home/phcp/file";String path = FILE_PATH + "/test/" + fileId;handFilePath(path);File file1 = new File(path);if (!file1.exists()) {try {file.transferTo(file1);} catch (IOException e) {throw new RuntimeException("保存文件失败");}}}return "ok";}/*** 判断多级路径是否存在,不存在就创建** @param filePath 支持带文件名的Path:如:D:/anxinsign/test1/abc/ttt/a.file,和不带文件名的Path:如:D:/anxinsign/test2/abcaa/ttt2*/public static void handFilePath(String filePath) {String paths[] = {""};//切割路径try {String tempPath = new File(filePath).getCanonicalPath();//File对象转换为标准路径并进行切割,有两种windows和linuxpaths = tempPath.split("\\\\");//windowsif (paths.length == 1) {paths = tempPath.split("/");}//linux} catch (IOException e) {System.out.println("切割路径错误");}//判断是否有后缀boolean hasType = false;if (paths.length > 0) {String tempPath = paths[paths.length - 1];if (tempPath.length() > 0) {if (tempPath.indexOf(".") > 0) {hasType = true;}}}//创建文件夹String dir = paths[0];for (int i = 0; i < paths.length - (hasType ? 2 : 1); i++) {// 注意此处循环的长度,有后缀的就是文件路径,没有则文件夹路径try {dir = dir + "/" + paths[i + 1];//采用linux下的标准写法进行拼接,由于windows可以识别这样的路径,所以这里采用警容的写法File dirFile = new File(dir);if (!dirFile.exists()) {dirFile.mkdir();System.out.println("成功创建目录:" + dirFile.getCanonicalFile());}} catch (Exception e) {System.err.println("文件夹创建发生异常");}}}/*** 获取上传文件的后缀,例如 .png** @param multipartFile* @return* @throws Exception*/public static String getPrefix(MultipartFile multipartFile) {//获取文件名,例如:QQ截图.pngString originalFilename = multipartFile.getOriginalFilename();//获取文件后缀,例如:.pngString prefix = originalFilename.substring(originalFilename.lastIndexOf("."));return prefix;}/*** 获取上传文件的md5* 32位小写** @param multipartFile* @return* @throws Exception*/public static String getMd5(MultipartFile multipartFile) throws Exception {//获取文件的byte信息byte[] uploadBytes = multipartFile.getBytes();//拿到一个MD5转换器MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] digest = md5.digest(uploadBytes);//转换为16进制return new BigInteger(1, digest).toString(16);}/*** 获取文件大小** @param file* @param type 单位,1=KB,2=MB* @return*/public static BigDecimal getFileSize(MultipartFile file, int type) {long size = file.getSize();BigDecimal sizeDecimal = new BigDecimal(size);BigDecimal kbDecimal = new BigDecimal(type == 1 ? "1024" : "1048576");BigDecimal sizeKB = sizeDecimal.divide(kbDecimal, 2, BigDecimal.ROUND_HALF_UP);return sizeKB;}/*** 获取文件大小** @param file* @param type 单位,1=KB,2=MB* @return*/public static BigDecimal getFileSize(File file, int type) {long size = file.length();BigDecimal sizeDecimal = new BigDecimal(size);BigDecimal kbDecimal = new BigDecimal(type == 1 ? "1024" : "1048576");BigDecimal sizeKB = sizeDecimal.divide(kbDecimal, 2, BigDecimal.ROUND_HALF_UP);return sizeKB;}
}

相关新闻

  • Windows 环境变量配置
  • 【含文档+PPT+源码】基于GPT+SpringBoot的个人健康管理与咨询架构设计与建立
  • HarmonyOS 5 Native与ArkTS混合开发实战:跨语言高性能组件开发

最新新闻

  • 2026 年 6 月昆明手表回收哪家强?红榜门店榜单出炉 - 讯息早知道
  • 基于MODBUS通信的台达B2伺服速度模式远程控制实践
  • Windows热键冲突终极指南:快速找出谁“偷走“了你的快捷键
  • 如何快速解决AutoCAD字体缺失问题:FontCenter插件的完整指南
  • 福州闲置黄金变现门店实测,无隐形扣费支持百万秒到账 - 讯息早知道
  • 杰理之提示音播放路径设置【篇】

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号