后端实现图片上传本地,可采用url查看图片

avatar
作者
猴君
阅读量:1

前言

本文将实现在数据库中存储图片url,url可以在浏览器中访问查看。
整体思路为:

  • 上传图片到本地指定地址
  • 为图片分配url保存至数据库
  • 根据分配url,进行物理地址映射到本地指定地址

具体实现

controller层:
上传图片到本地指定地址,为图片分配url保存至数据库

@PostMapping("/uploadImg")     @Operation(summary = "上传图片")     public Result<String> upload(MultipartFile file, HttpServletRequest request) {          String subPath = "\\upload\\Img\\";         String basepath = webFileUrl;         String path = "";         String vpath = "";         String fileType = "";         Map<String, Object> resultPath = WebFileUtils.saveFile(file, basepath + subPath, request);         path = resultPath.get("path").toString();         fileType = resultPath.get("fileType").toString();         vpath = "/statics/upload/" + "Img" + "/" + fileType + "/" + new File(path).getName();          return R2.ok(vpath,"上传成功");     } 

其中的WebFileUtils类:

public static Map<String, Object> saveFile(MultipartFile file, String webFileUrl, HttpServletRequest request) {         System.out.println();         String realPath, rootPath = webFileUrl;          if (webFileUrl.equals("")) {             //设置主路径             realPath = request.getServletContext().getRealPath("");             //将路径设置到当前项目同级,并创建upload文件夹             rootPath = new File(realPath).getParent() + "\\upload\\";         }         //组合文件名         String filename = System.currentTimeMillis() + "_" + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("\\") + 1);         //获取文件后缀         String extension = "." + FilenameUtils.getExtension(filename);         //生成新的文件名         String newFileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + UUID.randomUUID().toString().replace("-","") + extension;          // 区分上传文件是图片还是视频         String fileType;         FileNameMap fileNameMap = URLConnection.getFileNameMap();         String contentTypeFor = fileNameMap.getContentTypeFor(filename);         if (contentTypeFor == null){             fileType = "video";             rootPath = rootPath + "\\" + fileType +"\\";         }else{             fileType = "image";             rootPath = rootPath + "\\" + fileType +"\\";         }          String filePath = rootPath + newFileName;         File localFile = new File(filePath);          // 检测是否存在目录,不存在则创建         if (!localFile.getParentFile().exists()) {             localFile.getParentFile().mkdirs();         }         try {             //保存文件             file.transferTo(localFile);         } catch (IOException e) {             e.printStackTrace();         }          Map<String,Object> result = new MapUtils();         result.put("path", localFile.getAbsolutePath());         result.put("fileType", fileType );         //返回文件的绝对路径         return result;     } 

此处webFileUrl,替换为上传文件本地保存地址。

config:
在此处完成物理地址映射到本地指定地址

@Configuration public class UploadConfig implements WebMvcConfigurer {      @Override     public void addResourceHandlers(ResourceHandlerRegistry registry) {         registry.addResourceHandler("/api/statics/upload/Img/image/**")                 .addResourceLocations("file:本地保存地址");     } } 

至此,如果需要实现前端图片预览查看功能,请求数据库中保存的图片url即可。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!