【Java】SpringBoot 实现文件的上传与下载、日志记录、参数校验等(含代码示例)

在这里插入图片描述

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。
🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入社群,可以直接vx联系(文末有名片)v:bdizztt
🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此也可获得联系方式~

前言

SpringBoot是一个基于Spring框架的快速开发脚手架,它提供了快速集成各种常用功能的能力,比如文件上传下载、日志记录、参数校验等。

本文将通过代码示例实现SpringBoot项目中实现这些功能。

一、文件上传与下载

1.1 添加依赖

首先,需要在pom.xml文件中添加SpringBoot的Web依赖和文件上传依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

1.2 配置文件

在application.properties中配置文件上传的大小限制:

spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=10MB

1.3 文件上传 编写控制器

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {
        if (!file.isEmpty()) {
            try {
                // 获取文件名
                String fileName = file.getOriginalFilename();
                // 文件处理逻辑,例如保存到服务器上的某个目录
                // file.transferTo(new File("/path/to/destination/" + fileName));
                return "You successfully uploaded " + fileName + "!";
            } catch (Exception e) {
                return "File upload failed: " + e.getMessage();
            }
        } else {
            return "Please upload a file other than an empty one.";
        }
    }
}

1.3 文件下载 编写控制器

import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

@RestController
public class FileDownloadController {

    @GetMapping("/download")
    public ResponseEntity<byte[]> downloadFile() throws IOException {
        String fileName = "example.txt"; // 要下载的文件名
        File file = new File("/path/to/destination/" + fileName);

        // 将文件转换为字节数组
        byte[] fileBytes = Files.readAllBytes(file.toPath());

        // 设置响应的Header
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

        // 返回ResponseEntity对象
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(fileBytes.length)
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(fileBytes);
    }
}

二、日志记录

2.1 添加依赖

在pom.xml中添加日志框架依赖,例如使用SLF4J与Logback:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

2.2 使用日志

在类中注入Logger并使用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SomeService {
    private static final Logger logger = LoggerFactory.getLogger(SomeService.class);

    public void someMethod() {
        logger.info("some info message");
        // 其他业务逻辑
    }
}

三、参数校验

3.1 使用注解进行校验

import javax.validation.constraints.NotBlank;

public class SomeDTO {
    @NotBlank(message = "Name cannot be empty")
    private String name;

    // getters and setters
}

3.2 编写控制器并使用校验

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;

@RestController
@Validated
public class SomeController {

    @PostMapping("/some-endpoint")
    public String handleSomeRequest(@Valid SomeDTO dto) {
        // 处理请求
        return "Request processed successfully";
    }
}

四、传统的controller、service、impl层写法

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileService fileService;

    // 上传单个文件
    @PostMapping("/upload")
    public ResultVo<String> uploadFile(@RequestParam("file") MultipartFile file) {
        return fileService.uploadFile(file);
    }

}

服务层写法

public interface FileService {
    // 上传文件
    ResultVo<String> uploadFile(MultipartFile file);
    
}

FileServiceImpl写法

@Service
@Slf4j
public class FileServiceImpl implements FileService {

    // 上传文件
    @Override
    public ResultVo<String> uploadFile(MultipartFile file) {
        log.info("【文件上传】进入到文件上传方法");
        // 1.参数校验
        if (null == file || file.isEmpty()) {
            log.error("【文件上传】文件为空!");
            throw new ParamErrorException();
        }
        // 2.上传文件
        ResultVo<String> resultVo = FileUtil.uploadFile(file);
        return resultVo;
    }

}

总结

📝Hello,各位看官老爷们好,我已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。

📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论谈等等。

📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。

📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个大佬!

📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~

在这里插入图片描述

  • 32
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Spring Boot实现文件上传下载非常简单,你只需要在你的项目中引入对应的依赖,然后在你的代码中使用 Spring 提供的工具类即可。 首先,你需要在项目的 pom.xml 文件中引入 spring-boot-starter-web 依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 然后你就可以在你的 Controller 中使用 Spring 提供的工具类来实现文件上传下载了。 文件上传示例代码如下: ``` import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; @PostMapping("/upload") public void upload(@RequestParam("file") MultipartFile file) { // 使用 file.getInputStream() 和 file.getOriginalFilename() 获取文件输入流和文件名 // 然后你可以使用这些信息将文件保存到你的服务器中 } ``` 文件下载示例代码如下: ``` import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @GetMapping("/download") public ResponseEntity<InputStreamResource> download() throws IOException { File file = new File("/path/to/your/file.txt"); InputStreamResource resource = new InputStreamResource(new FileInputStream(file)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName()) .contentType(MediaType.APPLICATION_OCTET_STREAM) .contentLength(file.length()) .body(resource); } ``` 注意, ### 回答2: Spring Boot提供了简单且方便的方式来实现文件上传下载的功能。以下是基于Spring Boot文件上传下载实现步骤: 文件上传: 1. 创建Spring Boot项目并添加所需的依赖项,例如spring-boot-starter-web和spring-boot-starter-data-jpa。 2. 创建一个Controller类来处理文件上传请求。在该类中,使用@RequestParam注解来接收上传文件,并使用MultipartFile类型来处理文件数据。 3. 在Controller类中,使用File类来创建一个新的文件,并使用transferTo()方法将上传文件保存到指定的位置。 4. 在Controller类中,使用ResponseEntity来返回上传成功的消息或错误消息。 文件下载: 1. 创建一个Controller类来处理文件下载请求。在该类中,使用@RequestParam注解来接收要下载文件名。 2. 在Controller类中,使用File类来获取要下载文件,并使用InputStreamResource类来将文件包装为可发送的资源。 3. 在Controller类中,使用ResponseEntity来返回文件资源,并设置响应头部信息,例如Content-Disposition来指定文件名。 4. 在客户端发出下载文件请求时,将通过Controller类提供的链接来下载文件。 在实现文件上传下载时,还可以添加文件大小限制、文件类型限制和安全校验等功能来提高系统的稳定性和安全性。此外,还可以使用第三方库,如Apache Common FileUpload和Apache POI来更好地处理文件上传下载。 ### 回答3: Spring Boot是一个开源的Java开发框架,可以非常方便地实现文件上传下载功能。 文件上传功能可以通过使用Spring Boot提供的MultipartFile类来实现。首先,需要在Spring Boot的Controller中定义一个接口来处理文件上传的请求。可以使用@PostMapping注解来标识这个接口处理POST请求,然后使用@RequestParam注解来指定接收文件参数,例如@RequestParam("file") MultipartFile file。接收到文件后,可以调用MultipartFile类的transferTo()方法将文件保存到指定的路径。 文件下载功能可以通过使用Spring Boot提供的Resource类来实现。首先,需要在Spring Boot的Controller中定义一个接口来处理文件下载的请求。可以使用@GetMapping注解来标识这个接口处理GET请求,然后使用@RequestParam注解来指定接收文件名的参数,例如@RequestParam("filename") String filename。接收到文件名后,可以使用Resource类的createResource()方法创建一个Resource对象,然后使用ResponseEntity类将文件返回给客户端。 在实现文件上传下载功能时,还需要注意设置合适的文件保存路径和文件访问路径。可以在application.properties文件中配置文件保存路径,例如spring.servlet.multipart.location=/path/to/save/files。在文件访问路径方面,可以使用ResourceHandlerRegistry类的addResourceHandler()方法来配置文件访问路径,例如registry.addResourceHandler("/files/**").addResourceLocations("file:/path/to/save/files/")。 通过上述方式,可以很方便地使用Spring Boot实现文件上传下载功能。在实际开发中,还可以结合前端技术实现更加友好的文件上传下载界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员洲洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值