保存图片信息到数据库,并可读取后显示在前端

1.上传文件到后台

<form>
  <div class="filebox">
    <input type="file" id="upload" name="bean.file" class="file" οnchange="validFile();"/>
  </div>
  <label for="upload" id="uploadError" class="error"></lable>
</form>


2.读取二进制流,保存到数据库中(这里我在数据库创建的字段是mediumtext类型,也可以是blob或其他blob,若是blob,则将byte[]存入数据库)

InputStream in = null;
try {
  if (bean.getFile() != null) {
     in = new FileInputStream(bean.getFile());
     byte[] b = new byte[(int)bean.getFile().length()];
     in.read(b);
     bean.setImageBase64(new BASE64Encoder().encode(b));
     manager.save(bean);
  } catch() {

  } finally {

  }

3.读取图片

3.1 拼接src(若图片都比较小且无需兼容IE6.IE7,可以采用拼接src的方式)

<img id="myImg" src="data:image/" οnerrοr="imgLoadError()" />
input class="hidden" type="text" id="imageSuffix" name="bean.imageSuffix" />
<input class="hidden" type="text" id="imageBase64" name="bean.imageBase64" />

 
$(function() {
  $("#myImg").attr("src",$("#myImg").attr("src") + $("#imageSuffix").val() + ";base64," + $("#imageBase64").val() );

})
function imgLoadError() {
  $("#myImg").attr("alt","图片未上传或已被删除");
}
3.2向后台请求

$(function() {
  $("#myImg").attr("src",url);
})
Bean bean = manager.getImageByParams(params);
String imgBase64 = bean.getImageBase64();
String imgSuffix = bean.getImageSuffix();
if (StringUtils.isNotEmpty(imgBase64) && StringUtils.isNotEmpty(imgSuffix)) {
  response.setContentType("image/"+imgSuffix);
  response.setHeader("Pragma","no-cache");
  response.setIntHeader("Expired",-1);
  response.getOutputStream().write(new Base64Decoder().decodeBuffer(imgBase64));
}


几点记录:

1.出于安全考虑,IE浏览器必须双击上传,才弹出本地文件路径,可通过css修改

2.IE8以下的浏览器不支持Base64显示图片,IE8对这种方式显示图片有大小限制



参考:

http://www.cnblogs.com/xudong-bupt/p/3758529.html

http://hw1287789687.iteye.com/blog/1971297

http://www.jb51.net/article/48717.htm

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值