package com.nq.service.impl;
|
|
import com.google.common.collect.Lists;
|
import com.nq.common.ServerResponse;
|
import com.nq.service.IFileUploadService;
|
import java.io.File;
|
import java.io.IOException;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.Random;
|
import java.util.UUID;
|
|
import com.nq.utils.PropertiesUtil;
|
import com.nq.utils.ftp.FTPUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
@Service("iFileUploadService")
|
|
public class FileUploadServiceImpl
|
|
implements IFileUploadService {
|
|
private static final Logger log = LoggerFactory.getLogger(FileUploadServiceImpl.class);
|
|
|
public ServerResponse upload(MultipartFile file, String path) {
|
path = PropertiesUtil.getProperty("ftp.address");
|
// 参数校验
|
if (file == null || file.isEmpty()) {
|
return ServerResponse.createByErrorMsg("文件不能为空");
|
}
|
|
try {
|
// 获取原始文件名
|
String fileName = file.getOriginalFilename();
|
if (fileName == null || fileName.trim().isEmpty()) {
|
return ServerResponse.createByErrorMsg("文件名无效");
|
}
|
|
// 安全地获取文件扩展名
|
String fileExtensionName = "";
|
int lastDotIndex = fileName.lastIndexOf(".");
|
if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) {
|
fileExtensionName = fileName.substring(lastDotIndex + 1).toLowerCase();
|
} else {
|
return ServerResponse.createByErrorMsg("文件格式错误,无法识别扩展名");
|
}
|
|
// 验证文件扩展名是否合法
|
if (!isValidFileExtension(fileExtensionName)) {
|
return ServerResponse.createByErrorMsg("不支持的文件类型: " + fileExtensionName);
|
}
|
|
// 生成唯一文件名:时间戳 + 随机数
|
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS").format(new Date());
|
int randomNum = new Random().nextInt(99999);
|
String uploadFileName = timeStamp + "_" + String.format("%05d", randomNum) + "." + fileExtensionName;
|
|
// 确保目标目录存在
|
File targetDir = new File(path);
|
if (!targetDir.exists()) {
|
if (!targetDir.mkdirs()) {
|
return ServerResponse.createByErrorMsg("无法创建上传目录");
|
}
|
}
|
|
// 创建目标文件
|
File targetFile = new File(targetDir, uploadFileName);
|
|
// 保存文件
|
file.transferTo(targetFile);
|
|
// 验证文件是否成功保存
|
if (!targetFile.exists() || targetFile.length() == 0) {
|
return ServerResponse.createByErrorMsg("文件保存失败");
|
}
|
|
return ServerResponse.createBySuccess(uploadFileName);
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
return ServerResponse.createByErrorMsg("文件上传失败: " + e.getMessage());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ServerResponse.createByErrorMsg("上传过程发生异常: " + e.getMessage());
|
}
|
}
|
|
/**
|
* 验证文件扩展名是否合法
|
*/
|
private boolean isValidFileExtension(String fileExtension) {
|
if (fileExtension == null || fileExtension.trim().isEmpty()) {
|
return false;
|
}
|
|
// 定义允许的文件类型
|
String[] allowedExtensions = {
|
"jpg", "jpeg", "png"
|
};
|
|
for (String allowedExt : allowedExtensions) {
|
if (allowedExt.equalsIgnoreCase(fileExtension)) {
|
return true;
|
}
|
}
|
|
return false;
|
}
|
|
}
|