上传文件后,前端js解析出本地url,提取后,在后端怎么接收

前端通过方法解析出一个,文件上传的本地主机路径URL,后端怎么接收这个URL,是需要后端生成的URL怎么写呢?

img

哈喽,上传文件到服务器,然后保存文件,本地环境放本地,外网放服务器,也可以上传oss,可以根据请求地址判断什么环境:
代码大致如下:

public String uploadOssImg(@RequestParam("file") MultipartFile multipartFile,HttpServletRequest req)  {
  String reqUrl = req.getServerName(); // 通过这个判断环境
  String path = saveOneImg(multipartFile); // 保存
  return  '本地域名或外网域名或oss域名'+path
}

// 保存图片并返回路径,根据返回的路径进行域名拼接,即为完整路径
public String saveOneImg( MultipartFile multipartFile){
  if (multipartFile.isEmpty() || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
      log.error("未上传文件");
      return null;
  }
  String contentType = multipartFile.getContentType();
  if (!contentType.contains("")) {
      log.error("类型检测错误");
      return null;
  }
  String originalFileName = multipartFile.getOriginalFilename();
  String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
  String dirPath = '自己拼路径';
  String savePath = location + dirPath;  // location为服务器暴露外部访问路径
  String path = null;
  try {
      path =  dirPath + '/' + write(multipartFile, savePath,fileType);
  } catch (IOException e) {
      e.printStackTrace();
  }
  return path;
}

// 写文件
public String write(MultipartFile multipartFile, String savePath, String type) throws IOException {
  File file = new File(savePath);
  if (!file.exists()) {
      file.mkdirs();
  }
  FileInputStream fileInputStream = (FileInputStream) multipartFile.getInputStream();
  String fileName = UUIDUtil.getUuid() + type;
  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savePath + File.separator + fileName));
  byte[] bs = new byte[1024];
  int len;
  while ((len = fileInputStream.read(bs)) != -1) {
      bos.write(bs, 0, len);
  }
  bos.flush();
  bos.close();
  return fileName;
}

ajax,或者js提交表单

通过接口传到后端。需要定义一个接口

正常情况是,文件上传功能对接(对接的方式可以选择上面广大菜鸟的回答ajax的方式 )一个后端接口(上面李筱宝 的回答就是一个文件上传的接口),由后端将文件存储并返回文件的地址url。
可以参考一些开源项目的源码,来看看别人是怎么做的。

现在主流都是前后端分离,上传文件都不是上转文件路径,而是上传一个文件对象,然后后端接收到文件对象,保存在服务器里。 然后你访问的时候,一般也是以接口的形式,后端会给你一个文件路径,他给你路径,你访问他的时候做一个简单拼接就行,具体拼接你要问后端协商。


@PostMapping("/upload")
public void uploadOssImg(@RequestParam("file") MultipartFile multipartFile)  {
1、将这个文件保存在服务器本地
// 可以参考这种代码 Files.write(Paths.get("新的文件路径"), Files.readAllBytes(Paths.get(files.getAbsolutePath()))); 具体可以百度超级多
2、获取到该文件的相对路径
3、将该路径与你项目的外网 URL 地址拼接,这个不懂可以问你们运维要地址
4、该路径返回给前端
5、这个路径就是可以直接在前端展示的了
}

有用望采纳