前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java】SpringBoot 实现文件的上传与下载、日志记录、参数校验等(含代码示例)

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

作者头像
程序员洲洲
发布2024-06-11 08:32:24
550
发布2024-06-11 08:32:24
举报
文章被收录于专栏:项目文章项目文章

前言

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

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

一、文件上传与下载

1.1 添加依赖

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

代码语言:javascript
复制
<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中配置文件上传的大小限制:

代码语言:javascript
复制
spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=10MB

1.3 文件上传 编写控制器

代码语言:javascript
复制
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 文件下载 编写控制器

代码语言:javascript
复制
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:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

2.2 使用日志

在类中注入Logger并使用:

代码语言:javascript
复制
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 使用注解进行校验

代码语言:javascript
复制
import javax.validation.constraints.NotBlank;

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

    // getters and setters
}

3.2 编写控制器并使用校验

代码语言:javascript
复制
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层写法

代码语言:javascript
复制
@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileService fileService;

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

}

服务层写法

代码语言:javascript
复制
public interface FileService {
    // 上传文件
    ResultVo<String> uploadFile(MultipartFile file);
    
}

FileServiceImpl写法

代码语言:javascript
复制
@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全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、文件上传与下载
    • 1.1 添加依赖
      • 1.2 配置文件
        • 1.3 文件上传 编写控制器
          • 1.3 文件下载 编写控制器
          • 二、日志记录
            • 2.1 添加依赖
              • 2.2 使用日志
              • 三、参数校验
                • 3.1 使用注解进行校验
                  • 3.2 编写控制器并使用校验
                  • 四、传统的controller、service、impl层写法
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档