开发者

SpringBoot实现文件的上传、下载和预览功能

目录
  • 引言
  • 1. 引入依赖
  • 2. 创建文件上传、下载和预览的Controller
  • 3. 配置文件上传目录
  • 4. 创建上传目录
  • 5. 测试上传、下载和预览
    • 5.1 文件上传
    • 5.2 文件下载
    • 5.3 文件预览
  • 6. 处理大文件上传
    • 7. 文件预览类型支持
      • 8. 文件删除功能(可选)

        引言

        在Spring Boot项目中实现文件的上传、下载和预览功能,可以通过使用Spring MVC的MultipartFile接口来处理文件上传,并使用HttpServletResponse或Resource来实现文件下载和预览。下面是如何实现这些功能的完整示例。

        1. 引入依赖

        确保在pom.XML中引入了Spring Boot的相关依赖。通常情况下,Spring Boot Starter Web已经包含了必要的依赖。

        <dependency>
            <groupId>org.springframewwww.devze.comork.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        2. 创建文件上传、下载和预览的Controller

        你可以创建一个FileController来处理文件的上传、下载和预览。

        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.core.io.Resource;
        import org.springframework.core.io.UrlResource;
        import org.springframework.http.HttpHeaders;
        import org.springframework.http.MediaType;
        import org.springframework.http.ResponseEntity;
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.*;
        import org.springframework.web.multipart.MultipartFile;
        import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
         
        import Java.io.IOException;
        import java.net.MalformedURLException;
        import java.nio.file.Files;
        import java.nio.file.Path;
        import java.nio.file.Paths;
        import java.nio.file.StandardCopyOption;
         
        @Controller
        @RequestMapping("/files")
        public class FileController {
         
            // 文件保存路径(可以通过配置文件进行配置)
            @Value("${file.upload-dir}")
            private String fileUploadDir;
         
            // 文件上传
            @PostMapping("/upload")
            @ResponseBody
            public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
                // 获取文件名并且保存文件
                String fileName = file.getOriginalFilename();
                Path targetLocation = Paths.get(fileUploadDir).resolve(fileName);
                Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
         
                // 返回文件下载的URL
                String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
                        .path("/files/download/")
                        .path(fileName)
                        .toUriString();
         
                return "File uploaded successfully: " + fileDownloadUri;
            }
         
            // 文件下载
            @GetMapping("/download/{fileName}")
            public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) throws MalformedURLException {
                Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
                Resource resource = new UrlResource(filePath.toUri());
         
                if (!resource.exists()) {
                    return ResponseEntity.notFound().build();
                }
         
                return ResponseEntity.ok()
                        .contentType(MediaType.APPLICATION_OCTET_STREAM)
                        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
                        .body(resource);
            }
         
            // 文件预览(主要针对图片、PDF等可以直接在浏览器中显示的文件)
            @GetMapping("/preview/{fileName}")
            public ResponseEntity<Resource> previewFile(@PathVariable String fileName) throws MalformedURLException {
                Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
                Resource resource = new UrlResource(filePath.toUri());
         
                if (!resource.exists()) {
                    return ResponseEntity.notFound().build();
                }
         
                String contentType = "application/octet-stream";
                try {
                    contentType = Files.probeContentType(filePath);
                } catch (IOException e) {
                    e.printStackTrace();
                }
         
                return ResponseEntity.ok()
                        .contentType(MediaType.parseMediaType(contentType))
                        .body(resource);
            }
        }http://www.devze.com

        3. 配置文件上传目录

        application.propertiesapplication.yml中配置文件的上传php路径:

        file.upload-dir=C:/uploads
        

        或者使用application.yml

        fil编程客栈e:
          upload-dir: C:/uploads

        你可以将路径配置为你项目的目录,也可以指定到服务器的某个位置。

        4. 创建上传目录

        确保在你的系统上已经创建DxBHKTruG了配置文件中指定的上传目录,比如C:/uploads。如果没有创建,可以通过代码在项目启动时自动创建:

        import org.springframework.boot.CommandLineRunner;
        import org.springframework.stereotype.Component;
         
        import java.nio.file.Files;
        import java.nio.file.Path;
        import java.nio.file.Paths;
         
        @Component
        public class FileUploadDirectoryInitializer implements CommandLineRunner {
         
            @Value("${file.upload-dir}")
            private String fileUploadDir;
         
            @Override
            public void run(String... args) throws Exception {
                Path uploadPath = Paths.get(fileUploadDir);
                if (!Files.exists(uploadPath)) {
                    Files.createDirectories(uploadPath);
                }
            }
        }

        5. 测试上传、下载和预览

        5.1 文件上传

        你可以使用Postman、cURL或者前端页面来测试文件上传功能。上传文件的URL为:

        POST http://localhost:8080/files/upload
        

        参数名称为file

        5.2 文件下载

        你可以通过以下URL下载文件:

        GET http://localhost:8080/files/download/{fileName}
        

        其中{fileName}是文件的名称。

        5.3 文件预览

        你可以通过以下URL预览文件(如图片或PDF):

        GET http://localhost:8080/files/preview/{fileName}

        6. 处理大文件上传

        对于大文件上传,Spring Boot默认的最大上传文件大小可能不满足需求,可以通过以下配置进行调整:

        spring.servlet.multipart.max-file-size=100MB
        spring.servlet.multipart.max-request-size=100MB

        或者在application.yml中:

        spring:
          servlet:
            multipart:
              max-file-size: 100MB
              max-request-size: 100MB

        7. 文件预览类型支持

        通常情况下,浏览器支持预览的文件类型包括图片(如jpegpng)、PDF、文本文件等。如果文件类型不被浏览器支持,通常可以通过文件下载的方式处理。

        8. 文件删除功能(可选)

        你也可以添加一个删除文件的接口,来删除已上传的文件:

        // 文件删除
        @DeleteMapping("/delete/{fileName}")
        @ResponseBody
        public String deleteFile(@PathVariable String fileName) throws IOException {
            Path filePath = Paths.get(fileUploadDir).resolve(fileName).normalize();
            Files.deleteIfExists(filePath);
            return "File deleted successfully";
        }

        以上就是SpringBoot实现文件的上传、下载和预览功能的详细内容,更多关于SpringBoot文件上传、下载和预览的资料请关注编程客栈(www.devze.com)其它相关文章!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜