这里用的是图片进行测试
文件保存于数据库
首先前端拿到文件,在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();
就这一句代码即可
接着就是存入数据库
首先数据库对应的格式要正确
数据库类型要设置成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[]);
- 恢复完成 记得关闭流