优化代码

This commit is contained in:
jiangqiang 2022-07-09 17:46:29 +08:00
parent dd726f7985
commit 2621f2195d
4 changed files with 25 additions and 17 deletions

View File

@ -1,9 +1,14 @@
package cn.iocoder.yudao.framework.common.util.io; package cn.iocoder.yudao.framework.common.util.io;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
/** /**
@ -58,8 +63,20 @@ public class FileUtils {
return file; return file;
} }
/**
public static void main(String[] args) { * @param content 文件内容
* @param originalName 原始文件名
* @return path唯一不可重复
*/
public static String generatePath(byte[] content, String originalName) {
String sha256Hex = DigestUtil.sha256Hex(content);
// 如果存在name则优先使用name的后缀
if (StrUtil.isNotBlank(originalName)) {
String extName = FileNameUtil.extName(originalName);
return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
} else {
return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content));
}
} }
} }

View File

@ -16,7 +16,7 @@ public class FileTypeUtils {
/** /**
* 获得文件的 mineType对于docjar等文件会有误差 * 获得文件的 mineType对于docjar等文件会有误差
* *
* @param data 包含文件开头几千个字节的字节数组 * @param data 文件内容
* @return mineType 无法识别时会返回application/octet-stream * @return mineType 无法识别时会返回application/octet-stream
*/ */
@SneakyThrows @SneakyThrows
@ -37,7 +37,7 @@ public class FileTypeUtils {
/** /**
* 在拥有文件和数据的情况下最好使用此方法最为准确 * 在拥有文件和数据的情况下最好使用此方法最为准确
* *
* @param data 包含文件开头几千个字节的字节数组 * @param data 文件内容
* @param name 文件名 * @param name 文件名
* @return mineType 无法识别时会返回application/octet-stream * @return mineType 无法识别时会返回application/octet-stream
*/ */

View File

@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.infra.service.file; package cn.iocoder.yudao.module.infra.service.file;
import cn.hutool.core.io.FileTypeUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.io.FileUtils;
import cn.iocoder.yudao.framework.file.core.client.FileClient; import cn.iocoder.yudao.framework.file.core.client.FileClient;
import cn.iocoder.yudao.framework.file.core.utils.FileTypeUtils; import cn.iocoder.yudao.framework.file.core.utils.FileTypeUtils;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
@ -15,7 +14,6 @@ import lombok.SneakyThrows;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS; import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS;
@ -45,14 +43,7 @@ public class FileServiceImpl implements FileService {
// 计算默认的 path // 计算默认的 path
String type = FileTypeUtils.getMineType(content, name); String type = FileTypeUtils.getMineType(content, name);
if (StrUtil.isEmpty(path)) { if (StrUtil.isEmpty(path)) {
String sha256Hex = DigestUtil.sha256Hex(content); path = FileUtils.generatePath(content, name);
/* 如果存在name则优先使用name的后缀 */
if (StrUtil.isNotBlank(name)) {
String extName = FileNameUtil.extName(name);
path = StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
} else {
path = sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content), name);
}
} }
// 如果 name 为空则使用 path 填充 // 如果 name 为空则使用 path 填充
if (StrUtil.isEmpty(name)) { if (StrUtil.isEmpty(name)) {

View File

@ -37,7 +37,7 @@
:width="'100px'"></image-preview> :width="'100px'"></image-preview>
<i v-else>无法预览点击 <i v-else>无法预览点击
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
:href="getFileUrl+scope.row.configId+'/get/' + scope.row.path">下载 :href="getFileUrl + scope.row.configId + '/get/' + scope.row.path">下载
</el-link> </el-link>
</i> </i>
</template> </template>