Spring Boot项目中集成MinIO和KKFileView实现文件预览

511 阅读1分钟
  1. 搭建MinIO服务器:

    • 下载MinIO并运行,可以使用以下命令启动MinIO服务器:

      minio server /data --console-address ":9001"
      

      其中/data是存储文件的路径,9001是MinIO控制台的端口。通过浏览器访问http://localhost:9001,并使用默认的access key和secret key登录,创建一个bucket用来存储文件。

  2. 集成Spring Boot与MinIO:

    • pom.xml中添加MinIO SDK的依赖:

      xml
      <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.0.3</version>
      </dependency>
      
    • application.properties中添加MinIO的配置信息:

      minio.endpoint=http://localhost:9000
      minio.accessKey=minioadmin
      minio.secretKey=minioadmin
      minio.bucketName=files
      
    • 创建MinIO Service类,用于文件的上传和下载:

      java
      @Service
      public class MinioService {
          @Value("${minio.endpoint}")
          private String minioEndpoint;
          @Value("${minio.accessKey}")
          private String minioAccessKey;
          @Value("${minio.secretKey}")
          private String minioSecretKey;
          @Value("${minio.bucketName}")
          private String bucketName;
          private MinioClient minioClient;
          @PostConstruct
          public void init() {
              minioClient = MinioClient.builder()
                  .endpoint(minioEndpoint)
                  .credentials(minioAccessKey, minioSecretKey)
                  .build();
          }
          public String uploadFile(MultipartFile file) throws Exception {
              String fileName = System.currentTimeMillis() + "-" + file.getOriginalFilename();
              minioClient.putObject(
                  PutObjectArgs.builder()
                  .bucket(bucketName)
                  .object(fileName)
                  .stream(file.getInputStream(), file.getSize(), -1)
                  .contentType(file.getContentType())
                  .build()
              );
              return fileName;
          }
          public String getFileUrl(String fileName) {
              return minioClient.getPresignedObjectUrl(
                  GetPresignedObjectUrlArgs.builder()
                  .bucket(bucketName)
                  .object(fileName)
                  .build()
              );
          }
      }
      
    • 创建FileController,实现文件上传和预览的接口:

      java复制
      @RestController
      @RequestMapping("/files")
      public class FileController {
          @Autowired
          private MinioService minioService;
          @PostMapping("/upload")
          public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
              try {
                  String fileName = minioService.uploadFile(file);
                  return ResponseEntity.ok(fileName);
              } catch (Exception e) {
                  return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
              }
          }
          @GetMapping("/preview/{fileName}")
          public ResponseEntity<String> previewFile(@PathVariable String fileName) {
              String previewUrl = minioService.getPreviewUrl(fileName);
              return ResponseEntity.ok(previewUrl);
          }
      }
      ```1.  **集成KKFileView实现文件预览**:
      
      
    • 下载并运行KKFileView,可以使用Docker安装:

      docker run -d -p 8012:8012 --name kkfileview keking/kkfileview
      
    • 配置KKFileView服务的地址:

      kkfileview.server=http://localhost:8012
      
    • 在MinioService中创建一个方法,用于生成文件的预览URL:

      java
      public String getPreviewUrl(String fileName) {
          String fileUrl = getFileUrl(fileName);
          return kkFileViewServer + "/onlinePreview?url=" + URLEncoder.encode(fileUrl, StandardCharsets.UTF_8);
      }
      
    • 测试文件上传与预览,使用Postman或前端页面上传文件,访问/files/upload接口,然后访问/files/preview/{fileName}获取文件的预览链接。

通过上述步骤,你可以在Spring Boot项目中集成MinIO和KKFileView,实现文件的存储和在线预览功能。