最近接手的项目里面,有这个要求。要求把图片显示在页面上,这个以前就做过很老套的。把数据库中存储图片地址的字段取出来,放进Json数组里面就好了。但是忽然发现这次的图片是二进制的,SQLServer中的数据类型是Image类型。于是上网搜资料,看Demo。结果还是没有我想得到的。
我先说一下我自己的思路,首先必须得获取图片地址才能显示图片,但是怎么转换二进制的呢?网上搜了很多,写到代码里面但是没有成功,于是看了以前项目里面是怎么写的。
public void resp(HttpServletRequest request, HttpServletResponse response)
throws IllegalStateException, IOException {
A01 a01 = new A01();
String a01DID = request.getParameter("id");
a01.setA01DID(a01DID);
List<A01> list = cadreServiceI.findAllObject(a01);
byte[] bjxa0106 = list.get(0).getBjxa0106();
response.getOutputStream().write(bjxa0106);
}
通过ID获取唯一对象,然后通过response自带的输出流显示到界面里面。于是我换了个思路,在前端可以判断一下,如果Json里面的photo等于默认图片地址则不管,如果有东西的话把图片地址路径换成调用这个方法的的路径就可以了。
function insertDiv(data) {
var dl='';
var photo=''
if(data&&data.length){
for(var i=0;i<data.length;i++){
if(data[i].photo=="liger/img/renz1.jpg"){
photo='liger/img/renz1.jpg';
}else{
photo="<%=basePath%>busi/resp?id="+data[i].DID+"&a0215A="+new Date();//就是调用上面的方法。记住传参
}
dl += '<dl>'
+'<dt><img width="160" height="200" src="'+photo+'"></dt>'
+'<dd><a href="">'+data[i].name+'</a></dd>'
+'</dl>';
//把数据追加到列表容器
}
$("#photolist").append(dl);
}
}
上面是怎么让图片显示,接下来是怎么把图片转换成二进制。通过file上传后,获得里面的文件,通过InputStream和ByteArrayOutputStream完成二进制的转换。
@RequestMapping("/upload")
public byte[] uploadFile(HttpServletRequest request,HttpServletResponse response) throws IOException{
MultipartHttpServletRequest mulrequest=(MultipartHttpServletRequest) request;
MultipartFile file = mulrequest.getFile("file");
InputStream input=file.getInputStream();
ByteArrayOutputStream output=new ByteArrayOutputStream();
byte[] buffer=new byte[4096];
int n=0;
while(-1!=(n=input.read(buffer))){
output.write(buffer, 0, n);
}
output.toByteArray();
Log_Info.info = "使用流上传";
return null;
}
这部分代码仅仅是把图片改成二进制的方法,并没有把获取的二进制图片存进数据库中。需要同学们自己写方法把二进制图片放到数据库中