潘志宝
4 天以前 b8a0affd03b5fa9fa33cd6f870e90394c2df86c7
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.common.util.io;
H 2
3 import cn.hutool.core.io.FileTypeUtil;
4 import cn.hutool.core.io.FileUtil;
5 import cn.hutool.core.io.file.FileNameUtil;
6 import cn.hutool.core.util.IdUtil;
7 import cn.hutool.core.util.StrUtil;
8 import cn.hutool.crypto.digest.DigestUtil;
9 import lombok.SneakyThrows;
10
11 import java.io.ByteArrayInputStream;
12 import java.io.File;
13
14 /**
15  * 文件工具类
16  *
17  * @author iailab
18  */
19 public class FileUtils {
20
21     /**
22      * 创建临时文件
23      * 该文件会在 JVM 退出时,进行删除
24      *
25      * @param data 文件内容
26      * @return 文件
27      */
28     @SneakyThrows
29     public static File createTempFile(String data) {
30         File file = createTempFile();
31         // 写入内容
32         FileUtil.writeUtf8String(data, file);
33         return file;
34     }
35
36     /**
37      * 创建临时文件
38      * 该文件会在 JVM 退出时,进行删除
39      *
40      * @param data 文件内容
41      * @return 文件
42      */
43     @SneakyThrows
44     public static File createTempFile(byte[] data) {
45         File file = createTempFile();
46         // 写入内容
47         FileUtil.writeBytes(data, file);
48         return file;
49     }
50
51     /**
52      * 创建临时文件,无内容
53      * 该文件会在 JVM 退出时,进行删除
54      *
55      * @return 文件
56      */
57     @SneakyThrows
58     public static File createTempFile() {
59         // 创建文件,通过 UUID 保证唯一
60         File file = File.createTempFile(IdUtil.simpleUUID(), null);
61         // 标记 JVM 退出时,自动删除
62         file.deleteOnExit();
63         return file;
64     }
65
66     /**
67      * 生成文件路径
68      *
69      * @param content      文件内容
70      * @param originalName 原始文件名
71      * @return path,唯一不可重复
72      */
73     public static String generatePath(byte[] content, String originalName) {
74         String sha256Hex = DigestUtil.sha256Hex(content);
75         // 情况一:如果存在 name,则优先使用 name 的后缀
76         if (StrUtil.isNotBlank(originalName)) {
77             String extName = FileNameUtil.extName(originalName);
78             return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
79         }
80         // 情况二:基于 content 计算
81         return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content));
82     }
83
84 }