diff --git a/minio-plus-api/src/main/java/org/liuxp/minioplus/api/model/vo/FileCheckResultVo.java b/minio-plus-api/src/main/java/org/liuxp/minioplus/api/model/vo/FileCheckResultVo.java index e282420..86eded0 100644 --- a/minio-plus-api/src/main/java/org/liuxp/minioplus/api/model/vo/FileCheckResultVo.java +++ b/minio-plus-api/src/main/java/org/liuxp/minioplus/api/model/vo/FileCheckResultVo.java @@ -9,14 +9,14 @@ import java.util.ArrayList; import java.util.List; /** - * 文件检查结果VO + * 文件初始化结果 * * @author contact@liuxp.me - * @since 2023-06-26 + * @since 2024-06-26 **/ @Getter @Setter -@ApiModel("文件检查结果") +@ApiModel("文件初始化结果") public class FileCheckResultVo { /** * 主键 diff --git a/minio-plus-common/src/main/java/org/liuxp/minioplus/common/enums/MinioPlusErrorCode.java b/minio-plus-common/src/main/java/org/liuxp/minioplus/common/enums/MinioPlusErrorCode.java index 0136a44..ef9750b 100644 --- a/minio-plus-common/src/main/java/org/liuxp/minioplus/common/enums/MinioPlusErrorCode.java +++ b/minio-plus-common/src/main/java/org/liuxp/minioplus/common/enums/MinioPlusErrorCode.java @@ -22,6 +22,7 @@ public enum MinioPlusErrorCode { FILE_BYTES_FAILED(1005,"文件流不能为空"), FILE_UPLOAD_FAILED(1006,"文件上传失败"), FILE_PREVIEW_WRITE_FAILED(1007,"缩略图生成失败"), + FILE_ICON_FAILED(1008,"图标获取失败"), /** * MinIO 异常 diff --git a/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java b/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java index 133d8f3..3e7fbbd 100644 --- a/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java +++ b/minio-plus-core/src/main/java/org/liuxp/minioplus/core/engine/impl/StorageEngineServiceImpl.java @@ -365,6 +365,12 @@ public class StorageEngineServiceImpl implements StorageEngineService { try { // 文件权限校验,元数据为空或者当前登录用户不是文件所有者时抛出异常 this.authentication(metadata, fileKey, userId); + + if(!StorageBucketEnums.IMAGE.getCode().equals(metadata.getStorageBucket())){ + // 不是图片时,返回文件类型 + return metadata.getFileSuffix(); + } + // 生成缩略图 generatePreviewImage(metadata); // 创建图片预览地址 diff --git a/minio-plus-extension/src/main/java/org/liuxp/minioplus/extension/controller/StorageController.java b/minio-plus-extension/src/main/java/org/liuxp/minioplus/extension/controller/StorageController.java index 8e2a6fe..348c193 100644 --- a/minio-plus-extension/src/main/java/org/liuxp/minioplus/extension/controller/StorageController.java +++ b/minio-plus-extension/src/main/java/org/liuxp/minioplus/extension/controller/StorageController.java @@ -1,5 +1,6 @@ package org.liuxp.minioplus.extension.controller; +import cn.hutool.core.io.IoUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -7,16 +8,23 @@ import org.liuxp.minioplus.api.StorageService; import org.liuxp.minioplus.api.model.vo.CompleteResultVo; import org.liuxp.minioplus.api.model.vo.FileCheckResultVo; import org.liuxp.minioplus.api.model.vo.FilePreShardingVo; +import org.liuxp.minioplus.common.enums.MinioPlusErrorCode; +import org.liuxp.minioplus.common.enums.StorageBucketEnums; +import org.liuxp.minioplus.common.exception.MinioPlusException; import org.liuxp.minioplus.extension.context.Response; import org.liuxp.minioplus.extension.context.UserHolder; import org.liuxp.minioplus.extension.dto.FileCheckDTO; import org.liuxp.minioplus.extension.dto.FileCompleteDTO; import org.liuxp.minioplus.extension.dto.PreShardingDTO; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Controller; +import org.springframework.util.FileCopyUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; /** * 对象存储标准接口定义 @@ -35,6 +43,11 @@ public class StorageController { */ private static final String REDIRECT_PREFIX = "redirect:"; + /** + * 图标请求地址 + */ + private static final String ICON_PATH = "/storage/icon/"; + /** * 存储引擎Service接口定义 */ @@ -113,7 +126,7 @@ public class StorageController { } /** - * 图片原图预览 + * 获取图像 * @param fileKey 文件KEY * @return 原图地址 */ @@ -129,7 +142,9 @@ public class StorageController { } /** - * 图片缩略图预览 + * 文件预览 + * 当文件为图片时,返回图片的缩略图 + * 当文件不是图片时,返回文件类型图标 * @param fileKey 文件KEY * @return 缩略图地址 */ @@ -140,8 +155,44 @@ public class StorageController { // 取得当前登录用户信息 String userId = UserHolder.get(); + String url = storageService.preview(fileKey, userId); + if(url.length()<10){ + // 当返回值为文件类型时,取得图标 + url = ICON_PATH + url; + } + // 取得文件读取路径 - return REDIRECT_PREFIX + storageService.preview(fileKey, userId); + return REDIRECT_PREFIX + url; + } + + /** + * 根据文件类型取得图标 + * @param response HttpServletResponse + */ + @ApiOperation(value = "获取图标") + @GetMapping("/icon/{fileType}") + public void icon(HttpServletResponse response,@PathVariable String fileType) { + try { + + // 根据文件后缀取得桶 + String storageBucket = StorageBucketEnums.getBucketByFileSuffix(fileType); + + ClassPathResource cpr = new ClassPathResource(storageBucket+".png"); + + byte[] bytes = FileCopyUtils.copyToByteArray(cpr.getInputStream()); + + response.setHeader("content-disposition", "inline"); + response.setHeader("Content-Length", String.valueOf(bytes.length)); + ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); + + IoUtil.copy(inputStream, response.getOutputStream()); + inputStream.close(); + + } catch (Exception e) { + log.error(MinioPlusErrorCode.FILE_ICON_FAILED.getMessage(),e); + // 图标获取失败 + throw new MinioPlusException(MinioPlusErrorCode.FILE_ICON_FAILED); + } } } \ No newline at end of file diff --git a/minio-plus-extension/src/main/resources/audio.png b/minio-plus-extension/src/main/resources/audio.png new file mode 100644 index 0000000..84e7e69 Binary files /dev/null and b/minio-plus-extension/src/main/resources/audio.png differ diff --git a/minio-plus-extension/src/main/resources/document.png b/minio-plus-extension/src/main/resources/document.png new file mode 100644 index 0000000..dd86cbf Binary files /dev/null and b/minio-plus-extension/src/main/resources/document.png differ diff --git a/minio-plus-extension/src/main/resources/other.png b/minio-plus-extension/src/main/resources/other.png new file mode 100644 index 0000000..87b0017 Binary files /dev/null and b/minio-plus-extension/src/main/resources/other.png differ diff --git a/minio-plus-extension/src/main/resources/package.png b/minio-plus-extension/src/main/resources/package.png new file mode 100644 index 0000000..00d9fe6 Binary files /dev/null and b/minio-plus-extension/src/main/resources/package.png differ diff --git a/minio-plus-extension/src/main/resources/video.png b/minio-plus-extension/src/main/resources/video.png new file mode 100644 index 0000000..65a26d8 Binary files /dev/null and b/minio-plus-extension/src/main/resources/video.png differ