文件上傳到服務器本機,然后給出訪問地址:
具體如下:
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地址
至此即可實現上傳獲取訪問地址!