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

手机网站 微信网站 区别免费的郑州网络推广服务

手机网站 微信网站 区别,免费的郑州网络推广服务,wordpress主题生成工具,建筑网片钢筋网生产厂家使用 Spring Boot 实现文件上传:从配置文件中动态读取上传路径 一、前言二、文件上传的基本概念三、环境准备1. 引入依赖2. 配置文件设置application.yml 配置示例:application.properties 配置示例: 四、编写文件上传功能代码1. 控制器类2. …

使用 Spring Boot 实现文件上传:从配置文件中动态读取上传路径

      • 一、前言
      • 二、文件上传的基本概念
      • 三、环境准备
        • 1. 引入依赖
        • 2. 配置文件设置
          • `application.yml` 配置示例:
          • `application.properties` 配置示例:
      • 四、编写文件上传功能代码
        • 1. 控制器类
        • 2. 代码解析
        • 3. 配置实体类与服务层操作(可选)
      • 五、异常处理与文件上传安全
      • 六、小结


一、前言

在现代 Web 开发中,文件上传是一个常见的需求。Spring Boot 提供了强大的文件上传支持,但如何动态地根据配置文件来读取上传路径,并保证上传的安全性与灵活性呢?在本文中,我们将通过一个实际示例,详细介绍如何在 Spring Boot 中实现文件上传,且上传路径可从配置文件中读取。

二、文件上传的基本概念

文件上传指的是用户将文件通过 HTTP 请求上传到服务器的过程。通常,文件上传的功能包括:

  • 接收客户端发送的文件数据。
  • 保存上传的文件到服务器的指定目录。
  • 返回操作结果(如上传成功或失败)。

在 Java 中,Spring Boot 提供了 MultipartFile 类型来处理文件上传,常配合 @RequestParam 注解使用。

三、环境准备

在开始代码之前,我们先进行一些必要的环境准备工作。

1. 引入依赖

首先,我们需要在 Spring Boot 项目中引入相关依赖。通常,文件上传功能的实现需要 spring-boot-starter-webspring-boot-starter-thymeleaf(如果你使用 Thymeleaf 模板渲染)等基础组件。确保在 pom.xml 中包含以下依赖:

<dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 文件上传支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- Spring Boot DevTools (可选, 用于开发时热重载) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency>
</dependencies>
2. 配置文件设置

在 Spring Boot 中,配置文件(如 application.ymlapplication.properties)是管理应用程序配置的标准方式。我们需要在配置文件中设置上传文件的目录路径,以便从配置中动态读取。

application.ymlapplication.properties 中设置文件上传目录:

application.yml 配置示例:
file:upload-dir: C:/serve/upload
application.properties 配置示例:
file.upload-dir=C:/serve/upload

通过这些配置,我们可以在应用程序中读取文件上传目录,而不需要硬编码路径,增强了程序的灵活性。

四、编写文件上传功能代码

1. 控制器类

在 Spring Boot 中,我们通过 @RestController@Controller 注解来创建控制器类。在文件上传的实现中,我们需要处理 MultipartFile 类型的参数,并将文件保存到指定目录。以下是一个文件上传的控制器实现示例:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;@RestController
public class FileUploadController {// 从配置文件中读取文件上传目录路径@Value("${file.upload-dir}")private String uploadDir;/*** 上传文件*/@RequestMapping(value = "/upload", method = RequestMethod.POST)public R upload(@RequestParam("file") MultipartFile file, String type, HttpServletRequest request) throws Exception {// 检查文件是否为空if (file.isEmpty()) {throw new EIException("上传文件不能为空");}// 获取文件扩展名String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);// 生成文件名:当前时间戳 + 文件扩展名String fileName = new Date().getTime() + "." + fileExt;// 获取配置文件中的上传目录路径,并确保目录存在File uploadDirFile = new File(uploadDir);if (!uploadDirFile.exists()) {uploadDirFile.mkdirs();  // 创建目录}// 创建目标文件File dest = new File(uploadDirFile, fileName);// 将文件保存到目标路径file.transferTo(dest);// 如果上传的类型是 "1",则更新配置项 "faceFile"if (StringUtils.hasText(type) && "1".equals(type)) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if (configEntity == null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}// 返回成功的响应,包含文件名return R.ok().put("file", fileName);}
}
2. 代码解析
  • 读取配置文件路径:通过 @Value("${file.upload-dir}") 注解,我们可以将配置文件中的 file.upload-dir 属性注入到 uploadDir 变量中。这使得我们能够动态读取文件上传路径,而不需要在代码中硬编码路径。
  • 检查文件是否为空:在上传文件前,先检查文件是否为空,防止空文件上传。
  • 生成文件名:为了避免文件名重复,我们通过当前的时间戳来生成唯一的文件名。
  • 创建目录:在保存文件之前,检查指定的上传目录是否存在。如果目录不存在,我们会自动创建它。
  • 保存文件:通过 file.transferTo(dest) 将文件保存到服务器指定路径。
  • 返回响应:文件上传成功后,返回一个包含文件名的响应。
3. 配置实体类与服务层操作(可选)

在上传过程中,我们可能需要在数据库中保存一些文件信息,例如用户头像等。如果需要将文件信息保存到数据库中,我们可以定义一个 ConfigEntity 类,并通过 configService 操作数据库。

五、异常处理与文件上传安全

在文件上传过程中,我们应当注意以下几点安全问题:

  • 文件大小限制:应限制上传文件的大小,防止过大的文件消耗过多的服务器资源。Spring Boot 提供了相关配置项,如 spring.servlet.multipart.max-file-sizespring.servlet.multipart.max-request-size,可以设置上传文件的最大尺寸。

    spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MB
    
  • 文件类型限制:为了防止恶意文件上传,我们可以根据文件扩展名或 MIME 类型限制上传文件的类型。

  • 异常处理:为了提高代码的健壮性,我们可以通过 @ControllerAdvice@ExceptionHandler 统一处理文件上传中的异常,返回友好的错误信息。

六、小结

在这篇文章中,我们学习了如何在 Spring Boot 项目中实现文件上传,并从配置文件中动态读取上传路径。通过使用 Spring Boot 的 MultipartFile 和配置注入,我们可以灵活地管理文件上传功能,同时增强程序的可维护性与安全性。

http://www.yayakq.cn/news/880474/

相关文章:

  • 怎么做电脑端网站设计稿qq网页版一键登录
  • 八亿wap建站石家庄便宜网站制作
  • 网站权重网站建设 宁夏
  • 深圳极速网站建设定制html登录页面制作
  • 网站首页包含的内容怎么做网站备案是否收费
  • 网站404页面下载营销型网站定制
  • 毕业设计报告网站开发学软件去哪个培训机构
  • 做建材网站wordpress注册中文
  • 山西众邦建设集团网站如何制造一个网站
  • 百度免费推广网站网页设计欣赏怎么写
  • 智能网站价格桓台新城建设有限公司网站
  • 网站建设属于什么资产给自己做的网站换首页
  • 网站和做空间张家口建设厅网站
  • 江苏建设人才无纸化考核网站成都必去的十大景点
  • 建筑工程网上报建网站诚信手册网站建设安排总结
  • ppt电子商务网站建设微信小程序生成平台系统
  • 医院网站asp源码山东网站建设价格实惠
  • nodejs的网站开发石家庄做网络推广的公司
  • 长沙网站 微信建设做线下极限运动的网站
  • 在中国建设银行的网站上可以转账吗深圳网站建设制作厂家
  • 网站怎么做搜索引擎才能收录卡盟平台官网
  • 专业3合1网站建设电话wordpress本地搬迁
  • 哪个网站代做装修效果图如何做网站的cdn
  • 灵犀科技 网站开发收费网站建设
  • 出售网站建设群网络服务器无响应
  • 做网站需要用c语言吗18款禁用软件app排行
  • 北京网站制作案例wordpress文本编辑器按钮
  • 搭建服务器做网站wordpress 同步数据库
  • 中国精品课程网站高端网站开发成本
  • 北京公司网站制作wordpress主题显示不出来