| | |
| | | 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; |
| | |
| | | |
| | | |
| | | public ServerResponse upload(MultipartFile file, String path) { |
| | | String fileName = file.getOriginalFilename(); |
| | | String fileExtentionName = fileName.substring(fileName.lastIndexOf(".") + 1); |
| | | String uploadFileName = UUID.randomUUID() + "." + fileExtentionName; |
| | | File tartgetFile = new File(PropertiesUtil.getProperty("ftp.address"), uploadFileName); |
| | | try { |
| | | file.transferTo(tartgetFile); |
| | | return ServerResponse.createBySuccess(tartgetFile.getName()); |
| | | } catch (IOException e) { |
| | | return ServerResponse.createByErrorMsg("上传失败"); |
| | | 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; |
| | | } |
| | | |
| | | } |