界面上傳圖片時考慮到可能會有用戶的圖片名稱一致,使用UUID來對圖片名稱進行從新生成。web
//UUIDUtilsspring
public class UUIDUtils { public static String getUUID(){ return UUID.randomUUID().toString().replace("-", ""); } }
//FileNameUtil服務器
//生成新的文件名 public class FileNameUtil { /** * 獲取文件後綴 * @param fileName * @return */ public static String getSuffix(String fileName){ return fileName.substring(fileName.lastIndexOf(".")); } /** * 生成新的文件名 * @param fileOriginName 源文件名 * @return */ public static String getFileName(String fileOriginName){ return UUIDUtils.getUUID() + FileNameUtil.getSuffix(fileOriginName); } }
//FileUploadUtilapp
//圖片上傳工具類 public class FileUploadUtil { /** * * @param file 文件 * @param path 文件存放路徑 * @param fileName 原文件名 * @return */ public static boolean upload(MultipartFile file, String path, String fileName){ // 生成新的文件名 String realPath = path + "/" +fileName; //使用原文件名 // String realPath = path + "/" + fileName; File dest = new File(realPath); //判斷文件父目錄是否存在 if(!dest.getParentFile().exists()){ dest.getParentFile().mkdir(); } try { //保存文件 file.transferTo(dest); return true; } catch (IllegalStateException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } } }
//application.propertiesdom
# 設置單個文件最大內存
spring.servlet.multipart.max-file-size = 50Mb
# 設置全部文件最大內存
spring.http.multipart.max-request-size=500Mb
# 自定義文件上傳路徑
web.upload-path=F:/blog-images/
在這裏,因爲我將圖片上傳至本身的本地服務器上了,而本地的磁盤都是被保護的,沒法直接訪問他,因此我須要給個人圖片一個虛擬路徑,將虛擬路徑映射到此圖片存放位置便可ide
寫一個配置類uploadFileConfig工具
@Configuration public class UploadFileConfig extends WebMvcConfigurationSupport { @Override public void addResourceHandlers(ResourceHandlerRegistry registry){ registry.addResourceHandler("/images/**").addResourceLocations("file:/F:/blog-images/"); super.addResourceHandlers(registry); } }
以後寫Controllerpost
@ApiOperation("圖片上傳") @ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "File") @RequestMapping(value="/upload",method= {RequestMethod.POST,RequestMethod.GET}) @ResponseBody public Result upload(@RequestParam("file")MultipartFile file,HttpServletRequest request) { //定義要上傳文件 的存放路徑 String localPath="F:/blog-images/"; //得到文件名字 String fileName=file.getOriginalFilename(); fileName= FileNameUtil.getFileName(fileName); File dest = new File(localPath + fileName); if(FileUploadUtil.upload(file, localPath, fileName)){ // 將上傳的文件寫入到服務器端文件夾 // 獲取當前項目運氣的完整url String requestURL = request.getRequestURL().toString(); // 獲取當前項目的請求路徑url String requestURI = request.getRequestURI(); // 獲得去掉了uri的路徑 String url = requestURL.substring(0, requestURL.length()-requestURI.length() + 1); url="images/"+ fileName; return ResultUtil.success(url); } // 返回 return ResultUtil.error(202,"未知錯誤致使上傳失敗"); }
自此圖片上傳就成功啦,能夠用postman來測試下接口測試
OK,大功告成。ui