2019-11-21
文件上傳自定義上傳路徑,並且根據返回的Url可以進行訪問
配置文件 .yml
#文件上傳路徑 file: #虛擬路徑,對外展示 staticAccessPath: /file/** #本地測試真實路徑,可以改為服務器tomcat中路徑 fileupload: F:/fileupload/
WebConfig類
package io.renren.common.config; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @author: HYJ * @program: ivvdata-security * @description: 文件路徑以及WebMvc配置 * @create: 2019-11-15 10:13 */ @Data @Configuration public class WebConfig implements WebMvcConfigurer { @Value("${file.fileupload}") private String fileupload; @Value("${file.staticAccessPath}") private String staticAccessPath;
//主要在這里 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + fileupload); } //上面的方法跟這個一樣,下面的可以刪除 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/"); } }
Controller層
@PostMapping("/upload")
public R upload(@RequestParam("photo")MultipartFile photo, HttpServletRequest request) {// 定義上傳文件存放的路徑
String path = configProperties.getFileupload() + "uploadPhotos/";
System.out.println(path);
// 定義文件在上傳路徑中的文件夾名稱
File folder = new File(path);
// 檢測folder是否是文件夾,不是就創建
if (!folder.isDirectory()) {
folder.mkdirs();
}
try {
// 獲取文件的原始名稱
String photoName = photo.getOriginalFilename();
// 文件保存操作
photo.transferTo(new File(folder, photoName));
// 訪問的url
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String photoPath = basePath + configProperties.getStaticAccessPath().substring(0, configProperties.getStaticAccessPath().lastIndexOf("/") + 1) + "uploadPhotos/" + photoName ;
System.out.println(basePath);
System.out.println(photoPath );
return R.ok();
} catch (IOException e) {
return R.error();
}
}
