当前位置:   article > 正文

记录上传、保存、读取文件以及nginx映射_nginx接收文件并存储到本地

nginx接收文件并存储到本地

上传(此时就应该保存文件到本地了) 

  1. @Override
  2. public ResultMap upload(MultipartFile file) throws IOException {
  3. //若上传附件大小大于10M=10485760=10*1024*1024k
  4. // if (multipartFile.getSize() > 10485760) {
  5. // return ResultMap.error("上传图片不能大于10M");
  6. // }
  7. String path = partyFileUrl;
  8. File dir = new File(path);
  9. if (!dir.exists()) {
  10. dir.mkdirs();
  11. }
  12. // 获取文件的后缀
  13. String suffix = "." + file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".") + 1);
  14. // 生成文件名
  15. String fileName = "/" + System.currentTimeMillis() + RandomStringUtils.random(32, true, true) + suffix;
  16. File saveFile = new File(partyFileUrl + fileName);
  17. file.transferTo(saveFile);
  18. // 此处partyFile为文件夹名,可以在配置文件中写好获取
  19. String resPath = "partyFile" + fileName;
  20. return ResultMap.success("上传成功", resPath);
  21. }

保存文件

  1. @Override
  2. public ResultMap saveFile(TbVideo tbVideo, String path) {
  3. String fileExtension = null;
  4. String fileName = null;
  5. fileExtension = path.substring(path.lastIndexOf(".")); //获取后缀名
  6. //保存记录
  7. if (StringUtils.isBlank(tbVideo.getId())) {
  8. //在配置中 videoAndimgIp=192.168.xx.xx:8x8x/partyFile
  9. tbVideo.setVideoUrl("http://" + videoAndimgIp + "" + path.substring(path.lastIndexOf("/")+1));
  10. tbVideo.setResourcesType(fileExtension);
  11. tbVideo.setCreateTime(new Date());
  12. tbVideoMapper.insert(tbVideo);
  13. } else {
  14. tbVideoMapper.updateById(tbVideo);
  15. }
  16. return ResultMap.init(Const.RRTURN__TABLE_STATUS, Const.SAVE_SUCCESS, "http://" + videoAndimgIp + "" + path.substring(path.lastIndexOf("/")+1));
  17. }

del

  1. @Override
  2. public ResultMap delFile(Map map) {
  3. TbVideo tbVideo = tbVideoMapper.selectById(map.get("id").toString());
  4. boolean deleteImgFile = false;
  5. boolean deleteVideoFile = false;
  6. if (tbVideo.getImgUrl() != null && !tbVideo.getImgUrl().equals("")){
  7. // 获取数据库中的字符串并拼写成本地存储文件的地址,使之删除(index+1是因为 / 与文件系统格式不符合)
  8. String ImgUrl = getJarFilePath() + "/partyFile/" + tbVideo.getImgUrl().substring(tbVideo.getImgUrl().lastIndexOf("/") + 1);
  9. System.out.println(ImgUrl);
  10. File ImgFile = new File(ImgUrl);
  11. // 路径为文件且不为空则进行删除
  12. if (ImgFile != null && ImgFile.exists()) {
  13. deleteImgFile = ImgFile.delete();
  14. }
  15. }
  16. // 文件的删除
  17. if(tbVideo.getVideoUrl() != null && !tbVideo.getVideoUrl().equals("")){
  18. String VideoUrl = getJarFilePath() + "/partyFile/" + tbVideo.getVideoUrl().substring(tbVideo.getVideoUrl().lastIndexOf("/") + 1);
  19. File VideoFile = new File(VideoUrl);
  20. if (VideoFile != null && VideoFile.exists()) {
  21. deleteVideoFile = VideoFile.delete();
  22. }
  23. }
  24. int deletedatabase = tbVideoMapper.deleteById(map.get("id").toString());
  25. return ResultMap.init(Const.RRTURN__TABLE_STATUS,Const.DELETE_SUCCESS,"deleteImgFile:"+deleteImgFile+",deleteVideoFile:"+deleteVideoFile+",deletedatabase:"+deletedatabase);
  26. }

 

使用 PathVariable ,直接在网页中打开

  1. // http://192.168.xx.xx:8x8x/party/tb-video/readFile/partyFile/wenjian.houzhuiming
  2. @GetMapping("/readFile/partyFile/{url}")
  3. @ApiOperation(value = "读取文件(完成)")
  4. @ApiImplicitParam(name = "url", value = "文件地址")
  5. public void getFile(@PathVariable String url,HttpServletRequest request , HttpServletResponse response) {
  6. String serverUrl = "E:\\";
  7. String imgType = null;
  8. // 拼接到文件所存放的地址
  9. String imgUrl = serverUrl +"partyFile"+"\\"+ url;
  10. File file = new File(imgUrl);
  11. // 后缀名
  12. String suffixName = url.substring(url.lastIndexOf(".")).toLowerCase();
  13. imgType = "image/" + suffixName.replace(".","");
  14. //判断文件是否存在如果不存在就返回默认图标
  15. // if (!(file.exists() && file.canRead())) {
  16. // file = new File(request.getSession().getServletContext().getRealPath("/")
  17. // + "resource/icons/auth/root.png");
  18. // }
  19. FileInputStream inputStream = null;
  20. try {
  21. inputStream = new FileInputStream(file);
  22. byte[] data = new byte[(int) file.length()];
  23. int length = inputStream.read(data);
  24. inputStream.close();
  25. //setContentType("text/plain; charset=utf-8"); 文本
  26. response.setContentType(imgType + ";charset=utf-8");
  27. OutputStream stream = response.getOutputStream();
  28. stream.write(data);
  29. stream.flush();
  30. stream.close();
  31. } catch (FileNotFoundException e) {
  32. e.printStackTrace();
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }

 


后记

保存的地址可以不使用配置,使用获取jar包地址并创建新文件夹这种方式。

  1. //linux和windows下通用
  2. private String getJarFilePath() {
  3. ApplicationHome home = new ApplicationHome(getClass());
  4. File jarFile = home.getSource();
  5. return jarFile.getParentFile().toString();
  6. }

此时的上传接口

  1. @Override
  2. public ResultMap upload(MultipartFile file) throws IOException {
  3. String path = getJarFilePath() + "/partyFile";
  4. File dir = new File(path);
  5. if (!dir.exists()) {
  6. dir.mkdirs();
  7. }
  8. // 获取文件的后缀
  9. String suffix = "." + file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".") + 1);
  10. // 生成文件名
  11. String fileName = "/" + System.currentTimeMillis() + RandomStringUtils.random(32, true, true) + suffix;
  12. File saveFile = new File(path + fileName);
  13. file.transferTo(saveFile);
  14. String resPath = "/partyFile" + fileName;
  15. return ResultMap.success("上传成功", resPath);
  16. }

 

保存到本地后就是静态资源,无需再使用上面的接口获取了,可以使用nginx代理映射到存储文件夹下获取,只需要前端将src设定到这里就好了。

  1. location /partyFile {
  2. root /opt/djian;
  3. index index.html index.htm;
  4. }

再加上图片名即可。

至于图片名是否冲突,已经在上传时解决了——重新生成随机数字的名字。

 

这样就可以略去再用接口获取资源的开销,可以省去极多资源。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/232415
推荐阅读
相关标签
  

闽ICP备14008679号