要在SpringBoot项目中结合MinIO和kkFile实现文件预览功能,你可以按照以下步骤进行:
1. 容器安装kkFileViewer
首先,你需要下载并运行kkFileViewer,这是一个支持多种格式文件预览的服务。
- 下载kkFile安装包及Dockerfile:https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
- 构建镜像并启动kkFileViewer:
git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
cd kkfileviewer
docker build -t kkfileview:v4.4.0 .
docker run -d -p 8012:8012 --name kkfileview kkfileview:v4.4.0
- 访问测试:
http://your-ip:8012
2. SpringBoot集成MinIO
- 添加依赖:在
pom.xml
中添加MinIO的依赖。
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.11</version>
</dependency>
- 配置MinIO:在
application.properties
中添加MinIO的配置信息。
minio.endpoint=http://localhost:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucketName=files
- MinIO配置类:创建一个配置类,用于创建MinIO客户端。
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endPoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Value("${minio.bucketName}")
private String bucketName;
@Bean
protected MinioClient minioClient(){
return MinioClient.builder()
.endpoint(endPoint)
.credentials(accessKey, secretKey)
.build();
}
}
- MinIO工具类:创建一个工具类,用于文件的上传和获取预览URL。
@Component
public class MinioUtils {
@Value("${minio.bucketName}")
private String bucketName;
@Resource
private MinioClient minioClient;
public ApiResult uploadFile(MultipartFile file) throws AppException {
String fileName = System.currentTimeMillis() + file.getOriginalFilename();
try (InputStream fi = file.getInputStream()) {
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(bucketName)
.contentType(file.getContentType())
.object(fileName)
.stream(fi, fi.available(), -1)
.build();
minioClient.putObject(putObjectArgs);
} catch (Exception e) {
throw new AppException("文件上传失败" + e.getMessage());
}
return ApiResult.ok(fileName);
}
public ApiResult getPreviewUrl(String objectName) throws AppException {
try {
GetPresignedObjectUrlArgs urlArgs = GetPresignedObjectUrlArgs.builder()
.bucket(bucketName)
.object(objectName)
.method(Method.GET)
.build();
return ApiResult.ok(minioClient.getPresignedObjectUrl(urlArgs));
} catch (Exception e) {
throw new AppException("获取预览链接失败" + e.getMessage());
}
}
}
- 接口:创建一个控制器,用于处理文件上传和获取预览URL的请求。
@RestController
@RequestMapping("/file")
public class FileOperationController {
@Resource
private MinioUtils minioUtils;
@PostMapping("/upload")
public ApiResult upload(MultipartFile file) throws AppException {
return minioUtils.uploadFile(file);
}
@GetMapping("/getPreviewUrl")
public ApiResult getPreviewUrl(String fileName) throws AppException {
return minioUtils.getPreviewUrl(fileName);
}
}
3. 测试
- 上传文件:使用Postman或前端页面上传文件,访问
/file/upload
接口。 - 获取MinIO文件预览地址:3.1中返回的文件名,使用该文件名请求MinIO文件预览地址。
- 文件预览:3.2中的接口返回的地址,放到kkFileViewer文件预览服务中,可以预览文件。