import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
public class FileUpload {
public static FileUploadResult upload(String filePath, MultipartFile file) throws Exception{
FileUploadResult fileUploadResult;
if(StringUtils.isBlank(filePath)){
log.error(“文件路径不存在”);
throw new Exception(“文件路径不存在”);
}
Path path=Paths.get(filePath);
if(!Files.exists(path)) Files.createDirectories(path);
if(Objects.isNull(file)||file.getSize()==0){
log.error(“文件不存在或文件大小为0”);
throw new Exception(“文件不存在或文件大小为0”);
}
String originalFileName=file.getOriginalFilename();
String fileType = StringUtils.substringAfterLast(originalFileName, “.”);
if(StringUtils.isBlank(fileType)){
log.error(“上传的文件没有类型属性”);
throw new Exception(“上传的文件没有类型属性”);
}
String fileName = UUID.randomUUID()+ “.” + fileType;
path = Paths.get(filePath+ Objects.requireNonNull(fileName));
Files.write(path, file.getBytes());
//file.transferTo(new File(filePath+fileName));
fileUploadResult=new FileUploadResult()
.setFileName(fileName).setOriginalFileName(originalFileName)
.setFilePath(path.toString()).setFileType(fileType).setFileActualType(fileType);
return fileUploadResult;
}
public static List uploads(String filePath,MultipartFile[] files) throws Exception{
if(files.length ==0) return Collections.emptyList();
List fileUploadResultList=new ArrayList<>(files.length);
for(MultipartFile file :files) {
FileUploadResult fileUploadResult=upload(filePath,file);
if(Objects.nonNull(fileUploadResult)) fileUploadResultList.add(fileUploadResult);
}
return fileUploadResultList;
}
@Data
@Accessors(chain = true)
public static class FileUploadResult{
private String filePath; //文件路径
private String originalFileName; //文件原始名称
private String fileName; //文件名称
private String fileType; //文件类型
private String fileActualType; //实际类型
}
}