先介绍下blob:
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 64K
MediumBlob 最大16M
LongBlob 最大 4G
项目中遇到的,需要从数据库中调用字段类型为blob的图片文件,由于项目架构的特殊性,网上看到的关于使用Blob接收图片的方法在本次使用中均不能使用(在java中接收,使用Blob接收报错),最后通过如下方法解决(红色标记部分):
public String QMTP(HttpServletRequest request) {
String jsonObj = "";
JSONObject jp = new JSONObject();
JSONArray jsonRowdata = new JSONArray();
InputStream is = null;
OutputStream os = null;
try {
String zyys = request.getParameter("zyys") == null ? ""
: URLDecoder.decode(request.getParameter("zyys"), "utf-8");
String sql = "SELECT qmtp,bh FROM yhxxb WHERE yhxm = '" + zyys + "'limit 0,1";
CachedRowSetImpl crs = null;
crs = cls.executeQuery(sql);
while (crs.next()) {
JSONObject json = new JSONObject();
is = crs.getBinaryStream(1); // 接收
json.put("BH", crs.getString("bh"));
String path = request.getRealPath("/")+"QMImg//" + crs.getString("bh") + ".jpg"; //图片路径
File file = new File(path); //写出
Img2Base64Util base64 = new Img2Base64Util();
String Base64 = base64.getImgStr(path);
json.put("Base64", Base64);
System.out.println("Base64---"+Base64);
if (!file.exists()){
os = new FileOutputStream(file);
int num;
byte buf[] = new byte[1024];
while ((num = is.read(buf)) != -1) {
os.write(buf, 0, num);
}
}
jsonRowdata.put(json);
}
jp.put("rows", jsonRowdata);
jp.put("type", "list");
jsonObj = jp.toString();
} catch (Exception e) {
e.printStackTrace();
logger.info(e.getClass() + "----" + e.getMessage());
}
return jsonObj;
}