上传图片的方法(大白话讲解)

上传图片的方法

  • 在上传文件的时候需要知道其原理,因为我们的数据库是无法存储数据的,所以我们只能使用地址来找,所以数据库中应该村的是文件路径
  • 其次上传图片是属于上传文件的一种方式,所以也要学会上传文件的方法
  • 在之后呢也要注意上传图片和对象的关联

1,上传文件

@PostMapping("/file/{id}")
    public String fileUpload(@RequestParam(value = "file") MultipartFile file,@PathVariable("id")Integer id) {
        //首先判断输入的文件是否为空,如果是空就返回file页面
        if (file.isEmpty()) {
            System.out.println("文件为空空");
            return "file";
        }
        String fileName = file.getOriginalFilename();  // 文件名
        String filePath = "E:\\作业\\book\\src\\main\\resources\\static\\img\\"; // 上传后的路径
        File dest = new File(filePath + fileName);
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            file.transferTo(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Book book1 = bookDao.zym_1913040747_queryBookById(id);
        book1.setZym_1913040747_bookPath("img/" + fileName);
        System.out.println(book1.getZym_1913040747_bookPath());
        return "redirect:/books";
    }
  • 上传文件的步骤

    • 第一步就是传入参数MultipartFile类型,表示是一个文件,以及id值,对应的去找对应的对象。
    • 判断传入的文件是不是空的,如果是空的就继续跳转到这个页面
    • 之后查出文件的名字和上传的路径
    • getParentFile()方法是返回了一个指向了 包含该文件的文件夹的对象,exists()是判断是否存在的,所以要先去判断是否有这个对象的文件夹存在,如果有的话就可以直接使用,没有就去创建
    • 有了文件之后那就是要文件上传了,使用transferTo(dest)方法将上传文件写到服务器上指定的文件;
  • 这里呢文件上传就已经完成了

  • 开始解决第二个问题,就是如何讲图片和对象相互关联呢?这里呢我以我的一个练手项目举例(注意我没有用数据库,是用map集合存的数据)

    • 前端在插入文件的时候可以获取到这个书的id值,传给后端(这里会报红但是并不影响我们正常使用)

      <form th:action="@{/file/}+${book.getZym_1913040747_bookId}" method="post" enctype="multipart/form-data">
          <label>上传图片</label>
          <input type="file" name="file">
          <input type="submit" name="上传">
      </form>
      
    • 然后后台通过RESTFUl风格获取到到id,然后通过id再去找这个书的对象,然后通过set对象获取到这个对象.图片路径的属性

      Book book1 = bookDao.zym_1913040747_queryBookById(id);
      book1.setZym_1913040747_bookPath("img/" + fileName);//这里的话加img属性的话就可以直接直接通过相对路径去找到
      
  • 开始最重要的一步,资源路径映射(在这里踩坑了)

    • 要在自己配置的congfig的配置类中加上一个资源路径的映射,否则无法找到这个资源

      //访问映射路径,
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("img/**").addResourceLocations("file:E:\\作业\\book\\src\\main\\resources\\static\\img\\");
      }
      
    • 它这个其实很简短,就是我们通过img/文件名去找到的对象,但是他的真实路径其实是后面的这个路径。


版权声明:本文为qq_52880445原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。