如何利用springmvc上传图片二进制到数据库并回显到网页

本文介绍如何使用SpringMVC与MyBatis实现图片上传功能,包括配置文件上传解析器、处理图片二进制数据及在前端页面预览上传图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                              spring mvc and mybatis 上传图片并保存blob文件和回写jsp页面预览

  首先要明白几点:

  1 spring mvc 上传文件用表单提交时form 中enctype="multipart/form-data"如
果不加的话文件上传会fail并且后台接受不到。


2我们必须要在springmvc中设置一个文件拦截配置

   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="maxUploadSize" value="1024" />  
    </bean>

这里我才知道spirng框架已经集成了fileupload所以只要导入spring的核心core。jar包即可

3 由于我是写的保存blob文件所以不涉及虚拟文件路径




以下是代码-----------------------------------------------------


java的类定义

public class Person

{

Integer id;

byte [ ] photo;//

}

spring mvc controller 层的定义

{

Person person=new Person();

MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest) request;

  MultipartFile file=multipartRequest.getFile("photo");

 person.setPhoto(file.getbyte());

personService.save(person)// service层调用dao层完成对文件的保存了/

}

上传jsp页面

<form:form id="inputForm" modelAttribute="Person" action="${ctx}/Person/savePerson?action=${action}"  method="post" enctype="multipart/form-data" >

<input type="file"  id="photo" name="photo" onchange="preview(this)"  >  

 <div id="result" style="width:200px;height:220px;border-left:1px solid #000;border-right:1px solid #000;border-top:1px solid #000;border-bottom:1px solid #000;background:#F0F0F0 "  class="required">
    </div>

</form:form>

这里我用了一个js方法他可以去点击浏览选择图片后图片显示到上传jsp中以便用户更好的体验效果

 //预览图片
        function preview(obj)
        {
            var result = document.getElementById("result");
            var input = document.getElementById("photo");
            if(typeof FileReader==='undefined')
            {
                layer.alert("抱歉,你的浏览器不支持", {icon: 5});
                input.setAttribute('disabled','disabled');
            }
            else
            {
               // input.addEventListener('change',readFile,false);  
                 var file = obj.files[0];
                 if(!/image\/\w+/.test(file.type))
                 {
                  layer.msg('文件必须为图片!');
                  $("#photo").attr("value","");
                  return false;
                  }
                  var reader = new FileReader();
                  reader.readAsDataURL(file);
                  reader.onload = function(e)
                  {
                  result.innerHTML = '<img src="'+this.result+'" alt="" style="width:200px;height:220px" />'
                  }
            }
            
         }

filereader好像是ie5以上支持

下面是jsp回写当修改时照片从数据库中读出二进制传到jsp中jsp直接读取二进制流

定义一个photo.jsp

<body>
    <%
      response.setContentType("image/jpeg");
      ServletOutputStream sout = response.getOutputStream();
      byte b[] = (byte [])request.getAttribute("photo") ;
      sout.write(b);
      sout.flush();
      sout.close();
      out.clear();
      out = pageContext.pushBody();
    %>

这里需要注意的是request.getAttribute()他需要controller层把二进制requeset.setAttribute("photo",person.getphoto);

在调用photo.jsp那个jsp中我们可以用iframe

这里我用的是一个iframe(我的上传jsp和修改jsp是一个jsp页面)

<iframe id="officeContent" scrolling="no" src="${ctx}/Person/setPhoto?id=${id}" width=200px" height="220px" frameborder="0"  ></iframe>


我在controller层里写了一个

@RequestMapping(value="setPhoto")
    public String setPhoto(int id,HttpServletResponse response,HttpServletRequest request)
    {
        request.setAttribute("photo",Person.get(id).getPhoto());
        return "/personform/photo";
        
    }

这样就做好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值