springboot实现文件上传下载

本文介绍了如何使用SpringBoot快速实现文件上传和下载功能,包括创建上传和下载控制器、配置Multipart和ResourceHandler,以及在HTML表单中集成这些功能。
摘要由CSDN通过智能技术生成

Spring Boot提供了简单易用的方式来处理文件上传和下载功能。下面是一个简单的示例:

  1. 创建一个文件上传的控制器
@RestController
public class FileUploadController {

    private static final Logger logger = LoggerFactory.getLogger(FileUploadController.class);

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            // 保存文件
            byte[] bytes = file.getBytes();
            Path path = Paths.get(file.getOriginalFilename());
            Files.write(path, bytes);

            logger.info("文件上传成功:" + file.getOriginalFilename());
            return "文件上传成功:" + file.getOriginalFilename();
        } catch (IOException e) {
            logger.error("文件上传失败:" + e.getMessage());
            return "文件上传失败:" + e.getMessage();
        }
    }

}
  1. 创建文件下载的控制器
@RestController
public class FileDownloadController {

    private static final Logger logger = LoggerFactory.getLogger(FileDownloadController.class);

    @GetMapping("/download")
    public ResponseEntity<Resource> downloadFile() {
        try {
            // 加载文件资源
            Resource resource = new UrlResource("file:test.txt");
            String filename = resource.getFilename();
            String contentType = Files.probeContentType(Paths.get(filename));

            return ResponseEntity.ok()
                    .contentType(MediaType.parseMediaType(contentType))
                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"")
                    .body(resource);
        } catch (IOException e) {
            logger.error("文件下载失败:" + e.getMessage());
            return ResponseEntity.notFound().build();
        }
    }

}
  1. 在应用程序中配置文件上传和下载的细节。
#文件上传配置
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.file-size-threshold=0
@Configuration
public class AppConfig implements WebMvcConfigurer {

    //文件上传配置
    @Bean
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setMaxUploadSize(10485760);
        resolver.setMaxInMemorySize(4096);
        return resolver;
    }

    //文件下载配置
    @Bean
    public ByteArrayResource byteArrayResource() {
        return new ByteArrayResource(new byte[0]);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**")
                .addResourceLocations("file:/usr/local/data/");
    }

}
  1. 在页面上传文件
<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">上传文件</button>
</form>
  1. 在页面下载文件
<a th:href="@{/download}" download="test.txt">下载文件</a>

这样就实现了文件上传和下载功能。当用户上传文件时,文件将被保存在应用程序的根目录中。当用户下载文件时,文件将从文件系统中加载并作为响应传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值