文件上传到服务器本机,然后给出访问地址:
具体如下:
1、添加必要的工具类依赖
<!-- 文件上传工具类 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.18.0</version></dependency>
2、新增配置
1️⃣新增yml相关配置
文件保存位置:
# 文件相关
file:#后台服务模型目录modelPath: D:/home/software/data/upload/
2️⃣新增访问映射配置
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 通用配置** @author xjs*/
@Configuration
public class WebResourcesConfig implements WebMvcConfigurer {/*** 上传文件夹*/@Value("${file.modelPath}")private String uploadedFolder;/*** 添加资源处理程序** @param registry 注册表*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/*** 配置资源映射* 意思是:如果访问的资源路径是以“/model/”开头的,* 就映射到本机的“D:/home/software/data/upload/”这个文件夹内,然后访问资源* 注意:D:/home/software/data/upload/ 地址后面的 / 必须添加*/registry.addResourceHandler("/model/**").addResourceLocations("file:" + uploadedFolder);}/*** 跨域配置*/@Beanpublic CorsFilter corsFilters() {CorsConfiguration config = new CorsConfiguration();// 设置访问源地址config.addAllowedOriginPattern("*");// 设置访问源请求头config.addAllowedHeader("*");// 设置访问源请求方法config.addAllowedMethod("*");// 有效期 1800秒config.setMaxAge(1800L);// 添加映射路径,拦截一切请求UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);// 返回新的CorsFilterreturn new CorsFilter(source);}
}
3、具体代码实现
/*** 上传文件夹*/@Value("${file.modelPath}")private String uploadedFolder;@ApiOperation("上传文件-返回访问地址")@PostMapping("/uploadFiles")public ResponseEntity<Object> uploadFiles(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {// 获取当前时间Date nowDate = new Date( );// 定义日期格式SimpleDateFormat ftDdy = new SimpleDateFormat ("yyyy/MM/dd");// 定义时间格式SimpleDateFormat ftTime = new SimpleDateFormat ("HHmmss");// 创建一个HashMap用于存储文件信息HashMap<String, Object> map = new HashMap<>();// 判断文件是否为空if (file.isEmpty()) {// 如果文件为空,返回错误信息return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件不能为空!");}// 获取当前日期String directory = ftDdy.format(nowDate);// 获取当前时间String fileNames = ftTime.format(nowDate) + "_" + file.getOriginalFilename();// 打印文件名称log.info("文件名称: {}", fileNames);// 获取目标目录String targetDir = Paths.get(uploadedFolder, directory).toString();// 打印目标目录log.info("目标目录: {}", targetDir);// 创建目标目录createDirectoriesIfNotExists(targetDir);// 将文件名称和原始文件名称存入mapmap.put("newFileName", fileNames);map.put("originalFilename", file.getOriginalFilename());try {// 将文件保存到目标目录file.transferTo(Paths.get(targetDir, fileNames));// 将文件路径存入mapmap.put("filePath", targetDir + "\\" + fileNames);//http 协议 ://127.0.0.1 ip地址 :18080 端口号 / 文件目录(/model/2025/04/30/xxx.xxx)String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/model/" + directory + "/" + fileNames;log.info("文件上传,访问URL:" + url);map.put("url", url);return ResponseEntity.status(HttpStatus.OK).body(map);} catch (IOException e) {log.error("文件上传失败", e);return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败!");}}
4、实现上传
结果返回
{"filePath": "D:\\home\\software\\data\\upload\\2025\\04\\28\\110940_RC.gif","newFileName": "110940_RC.gif","originalFilename": "RC.gif","url": "http://192.168.5.88:18080/model/2025/04/28/110940_RC.gif"
}
然后即可在浏览器中访问url地址
至此即可实现上传获取访问地址!