• springboot实现文件上传下载


    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    @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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1. 在页面上传文件
    <form th:action="@{/upload}" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">上传文件button>
    form>
    
    • 1
    • 2
    • 3
    • 4
    1. 在页面下载文件
    <a th:href="@{/download}" download="test.txt">下载文件a>
    
    • 1

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

  • 相关阅读:
    博途1200PLC轴控功能块(脉冲轴)
    鱼传科技:函数计算,只要用上就会觉得香
    QT 6.5下载安装及配置教程
    echarts:nuxt项目使用echarts
    K8S安装过程十:Kubernetes CNI插件与CoreDNS服务部署
    从零学算法202
    ClickHouse学习笔记之MaterializeMySQL引擎
    C#:实现权重轮询调度算法(附完整源码)
    【Vue】V-if成立时,元素出现;不成立时,元素不显示。
    Java基础 --- 终止线程 Terminate Threads
  • 原文地址:https://blog.csdn.net/qq_36151389/article/details/132857239