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

springboot项目文件上传到服务器本机,返回访问地址

文件上传到服务器本机,然后给出访问地址:

具体如下:

1、添加必要的工具类依赖

        <!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.18.0</version></dependency>

2、新增配置

1️⃣新增yml相关配置

文件保存位置:

# 文件相关
file:#后台服务模型目录modelPath: D:/home/software/data/upload/

2️⃣新增访问映射配置


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 通用配置** @author xjs*/
@Configuration
public class WebResourcesConfig implements WebMvcConfigurer {/*** 上传文件夹*/@Value("${file.modelPath}")private String uploadedFolder;/*** 添加资源处理程序** @param registry 注册表*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/*** 配置资源映射* 意思是:如果访问的资源路径是以“/model/”开头的,* 就映射到本机的“D:/home/software/data/upload/”这个文件夹内,然后访问资源* 注意:D:/home/software/data/upload/ 地址后面的 / 必须添加*/registry.addResourceHandler("/model/**").addResourceLocations("file:" + uploadedFolder);}/*** 跨域配置*/@Beanpublic CorsFilter corsFilters() {CorsConfiguration config = new CorsConfiguration();// 设置访问源地址config.addAllowedOriginPattern("*");// 设置访问源请求头config.addAllowedHeader("*");// 设置访问源请求方法config.addAllowedMethod("*");// 有效期 1800秒config.setMaxAge(1800L);// 添加映射路径,拦截一切请求UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);// 返回新的CorsFilterreturn new CorsFilter(source);}
}

3、具体代码实现

    /*** 上传文件夹*/@Value("${file.modelPath}")private String uploadedFolder;@ApiOperation("上传文件-返回访问地址")@PostMapping("/uploadFiles")public ResponseEntity<Object> uploadFiles(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {// 获取当前时间Date nowDate = new Date( );// 定义日期格式SimpleDateFormat ftDdy = new SimpleDateFormat ("yyyy/MM/dd");// 定义时间格式SimpleDateFormat ftTime = new SimpleDateFormat ("HHmmss");// 创建一个HashMap用于存储文件信息HashMap<String, Object> map = new HashMap<>();// 判断文件是否为空if (file.isEmpty()) {// 如果文件为空,返回错误信息return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件不能为空!");}// 获取当前日期String directory = ftDdy.format(nowDate);// 获取当前时间String fileNames = ftTime.format(nowDate) + "_" + file.getOriginalFilename();// 打印文件名称log.info("文件名称: {}", fileNames);// 获取目标目录String targetDir = Paths.get(uploadedFolder, directory).toString();// 打印目标目录log.info("目标目录: {}", targetDir);// 创建目标目录createDirectoriesIfNotExists(targetDir);// 将文件名称和原始文件名称存入mapmap.put("newFileName", fileNames);map.put("originalFilename", file.getOriginalFilename());try {// 将文件保存到目标目录file.transferTo(Paths.get(targetDir, fileNames));// 将文件路径存入mapmap.put("filePath", targetDir + "\\" + fileNames);//http 协议 ://127.0.0.1 ip地址 :18080 端口号 / 文件目录(/model/2025/04/30/xxx.xxx)String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/model/" + directory + "/" + fileNames;log.info("文件上传,访问URL:" + url);map.put("url", url);return ResponseEntity.status(HttpStatus.OK).body(map);} catch (IOException e) {log.error("文件上传失败", e);return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败!");}}

4、实现上传

结果返回

{"filePath": "D:\\home\\software\\data\\upload\\2025\\04\\28\\110940_RC.gif","newFileName": "110940_RC.gif","originalFilename": "RC.gif","url": "http://192.168.5.88:18080/model/2025/04/28/110940_RC.gif"
}

然后即可在浏览器中访问url地址

至此即可实现上传获取访问地址!

相关文章:

  • 省哲学社科基金项目申请书(论证活页)模版框架参考
  • 【Linux】Java 开发者的 Linux 常用命令指南
  • 电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异
  • 力扣面试150题--K 个一组翻转链表
  • Linux0.11引导启动程序:简略过程
  • 深入蜂窝物联网 第三章 LTE-M(Cat-M1)详解:省电机制与移动特性
  • Spring系列六:JdbcTemplate
  • 【Rust通用集合类型】Rust向量Vector、String、HashMap原理解析与应用实战
  • case和字符串操作
  • Elastic Platform 8.18 和 9.0:ES|QL Lookup Joins 功能现已推出,Lucene 10!
  • 泰迪杯实战案例超深度解析:特殊医学用途配方食品数据分析与智能推荐系统设计
  • 零成本AI抠图终极指南:蓝耘元生代AIDC OS+ComfyUI实现商业级效果
  • 检查IBM MQ SSL配置是否成功
  • 比亚迪在智能化上,想再赢一次?
  • 从Flask到智能体:装饰器模式在AI系统中的架构迁移实践
  • 轻舟系列FPGA加速卡:大模型分布式训练中的高效协同者
  • 如何在idea中写spark程序
  • 【现代深度学习技术】循环神经网络07:通过时间反向传播
  • 什么是VR相机?VR相机的发展历史
  • Git技巧:Git Hook,自动触发,含实战分享
  • 世界人形机器人运动会将在北京“双奥场馆”举行
  • 古龙逝世四十周年|中国武侠文学学会与多所高校联合发起学术纪念活动
  • 央行行长详解降息:将通过利率自律机制引导商业银行相应下调存款利率
  • 文旅部:加强对景区索道、游船等设施设备安全隐患排查整治
  • 金沙记忆|元谋龙街渡:是起点也是终点
  • 山大齐鲁医院回应护士论文现“男性确诊子宫肌瘤”:给予该护士记过处分、降级处理