上传工具类 FileUtil
自行修改上传路径以及包名
package com.ham.nav_lite_backend.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* @description: 文件工具类 上传/下载
* @author: ham
* @date: 2024/9/9 11:22
*/
@Component
public class FileUtil {
/**
* 上传文件
*
* @param file MultipartFile 文件对象
* @throws IOException 如果上传过程中出现错误抛出异常
*/
public void uploadFile(MultipartFile file) throws IOException {
// 上传路径
String uploadDir = "E:\\Users\\ham\\Downloads\\uploads\\";
// 获取当前日期路径 (年/月/日)
String datePath = LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd"));
// 拼接上传路径和日期路径
String fullUploadDir = Paths.get(uploadDir, datePath).toString();
// 创建日期目录(如果不存在)
File dir = new File(fullUploadDir);
if (!dir.exists()) {
dir.mkdirs();
}
// 生成唯一的文件名
String originalFilename = file.getOriginalFilename();
String fileExtension = getFileExtension(originalFilename);
String uniqueFileName = UUID.randomUUID().toString() + fileExtension;
// 文件保存路径
Path filePath = Paths.get(fullUploadDir, uniqueFileName);
// 保存文件
Files.copy(file.getInputStream(), filePath);
}
/**
* 获取文件扩展名
*
* @param fileName 文件名
* @return 文件扩展名,带点,如 ".jpg"
*/
private String getFileExtension(String fileName) {
int dotIndex = fileName.lastIndexOf('.');
return (dotIndex == -1) ? "" : fileName.substring(dotIndex);
}
}
上传文件控制层 FileController
自行修改包名
package com.ham.nav_lite_backend.controller;
import com.ham.nav_lite_backend.utils.FileUtil;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
/**
* @description:
* @author: ham
* @date: 2024/9/9 15:06
*/
@RestController
@RequestMapping("/files")
public class FileController {
@Resource
private FileUtil fileUtil;
/**
* @param file:
* @return java.lang.Boolean
* @description: 上传文件
* @author: ham
* @date: 2024/9/10 11:10
**/
@PostMapping
public Boolean uploadFile(@RequestParam("file") MultipartFile file) {
try {
fileUtil.saveFile(file);
return true;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
静态资源映射配置 WebMvcConfig (配置后可以按照上传路径拼接后端地址访问文件)
自行修改上传路径以及包名
package com.ham.nav_lite_backend.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @description: 静态资源配置类,根据配置文件中的路径动态映射上传目录
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String uploadDir = "E:\\Users\\ham\\Downloads\\uploads\\"; // 上传路径
// 动态映射上传目录到 /attachments/** 路径
registry.addResourceHandler("/attachments/**")
.addResourceLocations("file:" + uploadDir);
}
}
请求示例
正文完