图片上传至数据库

图片在数据表中以blob类型字段的存储

前端界面,form表单提交,需要注意的点是 enctype ="multipart/form-data ,multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。

需要注意的是:默认情况下,enctype的值是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据。

<form action="/student/saveimg" method="post" enctype ="multipart/form-data">
<label for="file" class="btn btn-primary" style="float: left;height: 30px;width: 180px;margin-right: 20px">选择考生照片</label>
<input id="file" name="file" type="file" style="float: left;display:none"/>
<input class="btn btn-primary" type="submit" value="提交" style="float: left">
</form>
后端接收代码
@PostMapping (value = "/saveimg")
@ResponseBody
public Object searchMember(MultipartFile file){
try {
InputStream ins = file.getInputStream();
byte[] buffer=new byte[1024];
int len=0;
ByteArrayOutputStream bos=new ByteArrayOutputStream();
while((len=ins.read(buffer))!=-1){
bos.write(buffer,0,len);
}
bos.flush();
byte data[] = bos.toByteArray();
String sql= "update ies_student set photo = ? where id = ?";
PreparedStatement pstmt;
Connection con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setBytes(1, data);
pstmt.setInt(2,sId);
pstmt.executeUpdate();
// System.err.println("保存成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS_TIP;
}

private Connection getConnection()throws Exception{
String url = "jdbc:mysql://172.16.3.78:3306/ies?serverTimezone = UTC&characterEncoding = utf-8 ";

String user = "root";

String password = "root";

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection(url, user, password);

return conn;
}
这里利用JDBC进行预编译存储,以byte数组进行插入操作,在开发过程中用mapper进行的插入操作中sql语句读取不到变量值,在查阅资料过程中看到可以用mapper进行存储,但是也有另一种声音blob必须进行预编译处理或以对象形式进行存储,这里后期再进行研究补充


上一篇:大发*回血技巧篇之_【安装SDK工具包】


下一篇:Oracle:容器数据库简介