package com.tireba.admin.utils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.tireba.admin.entity.SysFile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
import java.util.stream.Stream;
/**
* @author Tireba
* @date 2023-11-24
*/
@Slf4j
public class FileUploadUitls {
private static final String[] ALLOW_FILE_TYPES = { "jpg", "jpeg", "png", "md", "pdf", "doc", "excel", "text/markdown"};
private static final String uploadDir = "D://upload";
private static final String visitPath = "upload";
public static String upload(MultipartFile file) throws Exception {
String contentType = file.getContentType().toLowerCase();
log.info("contentType: {}", contentType);
boolean allowType = false;
for (String allowFileType : ALLOW_FILE_TYPES) {
if(contentType.contains(allowFileType)) {
allowType = true;
break;
}
}
if (!allowType) {
return "请上传正确的文件格式";
}
String fileId = UUID.randomUUID().toString();
String subFolder = hashBy256(fileId);
// 目标文件夹
File destFolder = new File(uploadDir + File.separator + subFolder);
if (!destFolder.exists()) {
destFolder.mkdirs();
}
String originalFilename = file.getOriginalFilename();
String fileExt = getFileType(originalFilename);
String destFileName = fileId + "." + fileExt;
File destFile = new File(uploadDir + File.separator + subFolder + File.separator + destFileName);
log.info("file saved in: {}", destFile.getAbsoluteFile());
file.transferTo(destFile);
String filePath = visitPath + File.separator + subFolder + File.separator + destFileName;
String fileUri = transferPathAsImageUri(filePath);
log.info("fileUri: {}", fileUri);
log.info("fileId: {}", fileId);
log.info("subFolder: {}", subFolder);
log.info("destFolder: {}", destFolder);
log.info("originalFilename: {}", originalFilename);
log.info("fileExt: {}", fileExt);
log.info("destFileName: {}", destFileName);
log.info("destFile: {}", destFile);
log.info("filePath: {}", filePath);
log.info("fileUri: {}", fileUri);
Long fileSize = file.getSize();
SysFile sysFile = SysFile.builder()
.fileId(fileId)
.filePath(filePath)
.fileFormat(fileExt)
.fileSize(fileSize)
.mediaType(contentType)
.originalName(originalFilename)
.build();
return sysFile.getFileId();
}
public static String hashBy256(String str) {
String s = Integer.toHexString(Math.abs(str.hashCode()) % 256).toUpperCase();
if (s.length() == 1) {
s = "0" + s;
}
return s;
}
/**
* 获取文件扩展名称
* @param originalFilename
* @return
*/
private static String getFileType(String originalFilename){
int extPos = originalFilename.lastIndexOf(".");
if (extPos != -1) {
return originalFilename.substring(extPos + 1);
}
throw new RuntimeException("未知类型");
}
public static String transferPathAsImageUri(String fileServerPath) {
if (!StringUtils.hasLength(fileServerPath)) {
return null;
}
return "/" + fileServerPath.replaceAll("\\\\", "/");
}
public static void main(String[] args) throws IOException {
String content = "use java write 'Hello World !'";
Path path = Paths.get("D:\\Users\\1.txt");
Files.write(path, content.getBytes(StandardCharsets.UTF_8));
Stream<String> stream = Files.lines(path);
stream.forEach(System.out::println);
}
}
好用的文件上传工具
最新推荐文章于 2024-07-21 22:27:18 发布