diff --git a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java index b012d68a..e4422469 100644 --- a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java +++ b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java @@ -3,6 +3,7 @@ package org.jetlinks.community.io.file; import lombok.Getter; import lombok.Setter; import org.apache.commons.io.FilenameUtils; +import org.jetlinks.community.io.utils.FileUtils; import org.springframework.http.MediaType; import org.springframework.util.StringUtils; @@ -42,48 +43,27 @@ public class FileInfo { if (!apiBashPath.endsWith("/")) { apiBashPath = apiBashPath + "/"; } - accessUrl = apiBashPath + "file/" + id + "?accessKey=" + accessKey().orElse(""); + accessUrl = apiBashPath + "file/" + id + "." + extension + "?accessKey=" + accessKey().orElse(""); } public MediaType mediaType() { - if (!StringUtils.hasText(extension)) { - return MediaType.APPLICATION_OCTET_STREAM; - } - switch (extension.toLowerCase()) { - case "jpg": - case "jpeg": - return MediaType.IMAGE_JPEG; - case "png": - return MediaType.IMAGE_PNG; - case "gif": - return MediaType.IMAGE_GIF; - case "mp4": - return MediaType.parseMediaType("video/mp4"); - case "flv": - return MediaType.parseMediaType("video/x-flv"); - case "text": - case "txt": - return MediaType.TEXT_PLAIN; - case "js": - return MediaType.APPLICATION_JSON; - default: - return MediaType.APPLICATION_OCTET_STREAM; - } + return FileUtils.getMediaTypeByExtension(extension); } - public boolean hasOption(FileOption option){ - if(options==null){ + public boolean hasOption(FileOption option) { + if (options == null) { return false; } for (FileOption fileOption : options) { - if(fileOption==option){ + if (fileOption == option) { return true; } } return false; } + public FileInfo withFileName(String fileName) { name = fileName; extension = FilenameUtils.getExtension(fileName); diff --git a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/utils/FileUtils.java b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/utils/FileUtils.java index dcb4e670..5239de82 100644 --- a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/utils/FileUtils.java +++ b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/utils/FileUtils.java @@ -48,6 +48,13 @@ public class FileUtils { return getMediaTypeByExtension(FilenameUtils.getExtension(name)); } + + /** + * 根据文件拓展名获取MediaType + * + * @param extension extension + * @return MediaType + */ public static MediaType getMediaTypeByExtension(String extension) { if (!StringUtils.hasText(extension)) { return MediaType.APPLICATION_OCTET_STREAM; @@ -60,6 +67,13 @@ public class FileUtils { return MediaType.IMAGE_PNG; case "gif": return MediaType.IMAGE_GIF; + case "svg": + return MediaType.parseMediaType("image/svg+xml"); + case "tiff": + case "tif": + return MediaType.parseMediaType("image/tiff"); + case "webp": + return MediaType.parseMediaType("image/webp"); case "mp4": return MediaType.parseMediaType("video/mp4"); case "flv": @@ -67,8 +81,20 @@ public class FileUtils { case "text": case "txt": return MediaType.TEXT_PLAIN; + case "html": + return MediaType.TEXT_HTML; + case "md": + return MediaType.TEXT_MARKDOWN; + case "css": + return MediaType.parseMediaType("text/css"); case "js": + return MediaType.parseMediaType("text/javascript"); + case "xml": + return MediaType.TEXT_XML; + case "json": return MediaType.APPLICATION_JSON; + case "pdf": + return MediaType.APPLICATION_PDF; default: return MediaType.APPLICATION_OCTET_STREAM; }