从请求中拿到文件存储到数据库,并能从数据库恢复到本地的方法

这里用的是图片进行测试

文件保存于数据库

首先前端拿到文件,在java中使用的是 MultipartFile 这个类
前端代码中:

<input type="file" id="f1" name="file1" xxxxxxxxxx>

这里的name=“file1” 很重要 因为对应后端是:

@RequestMapping("/自己写")
    public String uploadimg(HttpServletRequest request, HttpServletResponse response,
                          @RequestParam("file1") MultipartFile file1)throws Exception {
                          自己写的代码块
                          }

这里的 @RequestParam(“file1”)中的 file1 就和前端的 file1 对应了起来 所以 不能乱起名
这样就拿到前端传过来的文件
然后 转换成2进制

byte[] bytes1 = file1.getBytes();

就这一句代码即可
接着就是存入数据库

首先数据库对应的格式要正确
从请求中拿到文件存储到数据库,并能从数据库恢复到本地的方法_第1张图片
数据库类型要设置成blob的类型,mediumbolb只是能存储的文件的大小不一样而已,但归根结底也是blob类型,无伤大雅。

那么一个表基本上会对应一个实体类,另外,例如数据库中的 varchar 、text都对应java中的String
那么 blob对应什么类型呢 对应java中的 byte[] 所以,java的实体类应该是

    private String xxxxx;
    private String xxxx;
    private byte[] img1;//看这里
    private xxxxxxx xxxxxx;

实体类写完了 下面就是写Mapper文件 以及写xml文件
在写xml文件的时候需要注意:

        insert into 表名
        values (
                #{某某某},
                #{某某某},
                #{img1,typeHandler=org.apache.ibatis.type.BlobTypeHandler},
                #{某某某}
                )
    insert>

这么写就好 其他的都没什么需要注意的
下面就是写Service 什么什么的 这个都没什么不同
至此,文件保存至数据库结束

文件从数据库恢复

  • 自己写select语句
  • 拿到封装好的对象 然后用他的 .get()方法得到byte[]数组
  • 使用 FileOutputStream fileOutputStream=new FileOutputStream(
    new File(你想把图片恢复到哪个位置,写个绝对路径在这里,注意!!!是路径+文件名+后缀 ) );
  • 然后 fileOutputStream.write(刚才得到的那个byte[]);
  • 恢复完成 记得关闭流

你可能感兴趣的:(前端,java,intellij-idea)