任务:
uos.docfile的content字段是longblob类型的,通过页面将文件存储到这个字段里。
页面代码:
<div class="box"> <div class="box-head"> <h2>Upload a document</h2> </div> <form name="form1" action="uploadDocument.html" method="post" ENCTYPE="multipart/form-data"> <div class="form" > <p> <span class="req"><input id="remarkTxt" name="remarkTxt" class="field size4" title="Enter the date" /></span> <label>Remark: <span>(The brief introduction of the file)</span></label> </p> <p> <span class="req"><input type="file" name="uploadFileCtrl" class="field size4" title="Choose the file" /></span> <label>Upload file: <span>(Max Size:20M)</span></label> </p> </div> <div class="buttons"> <input id="queryBtn" type="button" class="button" value="Submit" /> </div> </form> </div>
1.控制器的代码
@RequestMapping(value="/uploadDocument") public String uploadDocument(@RequestParam("remarkTxt") String remark, @RequestParam("uploadFileCtrl") MultipartFile file,HttpServletRequest request,HttpServletResponse response){ try { // 从session中获得用户 String userId=getUserIdFromSession(request); // 得到上传文件名 String uploadFileName=file.getOriginalFilename(); request.setAttribute("uploadFileName", uploadFileName); if(file.isEmpty()==false){ InputStream is=file.getInputStream(); service.uploadDocument(remark, is,file.getSize(),userId,uploadFileName); is.close(); return "/pages/doc/result/index.jsp"; }else{ throw new Exception("The file you uploaded is NULL. Please check and retry."); } } catch (Exception e) { e.printStackTrace(); logger.error(e); request.setAttribute("error", e.getClass()); request.setAttribute("reason", e.getMessage()); StackTraceElement[] arr=e.getStackTrace(); request.setAttribute("stackTraceElements", arr); return "pages/error/index.jsp"; } }
2.Serivce中代码,这部分只是个中转
public int uploadDocument(String remark,InputStream fin,long filesize,String email,String uploadFileName) throws Exception{ return getPosDao().uploadDocument(remark, fin,filesize,email,uploadFileName); }
3.DAO中代码,这部分是实质性代码
public int uploadDocument(final String remark,final InputStream fin,final long filesize,final String email,String uploadFileName) throws Exception{ final LobHandler lobHandler=new DefaultLobHandler(); return this.getJdbcTemplate().execute("insert into uos.docfile(remark,content,email,addtime,filename) values ('"+remark+"',?,'"+email+"',NOW(),'"+uploadFileName+"' )", new AbstractLobCreatingPreparedStatementCallback(lobHandler){ protected void setValues(PreparedStatement pstmt,LobCreator lobCreator){ try { lobCreator.setBlobAsBinaryStream(pstmt,1,fin,(int)filesize); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }