spring-boot上傳檔案最佳解決辦法
阿新 • • 發佈:2019-01-29
很多人使用springboot上傳檔案的時候最煩的就是上傳路徑的問題 下面的方法最便捷 最易懂
在配置檔案中配置如下
xcloud:
#uploadPath: D:/var/uploaded_files/
uploadPath: C:/Users/renke/apache-tomcat-8.5.24/upload/
media:
save:
urlprefix: https://www.xxxxx.com
編寫上傳路徑配置類
@Component @ConfigurationProperties(prefix="xcloud") public class UploadConfig { //上傳路徑 private String uploadPath; public String getUploadPath() { return uploadPath; } public void setUploadPath(String uploadPath) { this.uploadPath = uploadPath; } }
上傳檔案方法注入
@Autowired
UploadConfig uploadConfig;
@Value("${media.save.urlprefix}")
private String urlprefix;
/** * 本地上傳檔案介面 * @param file * @param request * @return * @throws IOException */ @CrossOrigin @PostMapping("/{account}/upload.json") public Response upload(@RequestParam("file") MultipartFile[] file,@PathVariable("account") String account, HttpServletRequest request) throws IOException { log.info("圖片上傳開始....."); if (null != file && file.length > 0) { //遍歷並儲存檔案 for (MultipartFile files : file) { if (file != null) { //取得當前上傳檔案的檔名稱 String fileName = account + files.getOriginalFilename(); //如果名稱不為“”,說明該檔案存在,否則說明該檔案不存在 //本地上傳圖片方式 fileName = FileUtil.renameToUUID(fileName); try { FileUtil.uploadFile(files.getBytes(), uploadConfig.getUploadPath(), fileName); } catch (Exception e) { return Response.fail("異常"); } log.info(">>>>>>>>>>>>>本地上傳圖片路徑 {}", "/files/" + fileName); return Response.success().put("fileName", urlprefix + "/files/" + fileName); } } } else { return Response.fail("上傳檔案不能為空"); } return Response.success(); }
然後新建一個WebConfigurer配置類 繼承WebMvcConfigurerAdapter
@Slf4j @Component class WebConfigurer extends WebMvcConfigurerAdapter { @Autowired UploadConfig uploadConfig; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/files/**").addResourceLocations("file:///"+uploadConfig.getUploadPath()); } }
這樣上傳的檔案就可以儲存在你配置檔案中設定的路徑中 訪問加上字首就可以指向本地儲存路徑了 注意一下 有攔截器或者許可權攔截的業務時 記得把/filse路徑放行才能訪問
技術有限 如有疑問 歡迎指導