- 浏览: 127828 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
calosteward:
赞一个。 谢谢分享了~非常有用。 —————————————— ...
项目里用到的Jquery,json,struts2结合 -
zhouylf:
文章都还行,就是变量名起的好恶心,“wzXxfbPdtp”还 ...
Springmvc3实现文件上传 -
zongshoujin:
老大 List和Map 在前台解析不出来,我看了下 是j ...
struts2返回JSON,jquery解析JSON(返回的可能是LIST,MAP,对象,单个值) -
kfjihailong:
269565478@qq.com 求源码
springmvc+dwz+xheditor实现上传图片及swf 视频 -
eric.zhang:
<div class="quote_title ...
dwz+jquery+fileupload+springmvc实现文件上传 及图片预览
1 前台jsp:文件的上传利用了iframe实现局部刷新功能。使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jar
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
JSP页面:
2 后台Controller
图片预览需要用到的js:
CJL.0.1.min.js
ImagePreviewd.js
QuickUpload.js
3下面是实现图片预览的servlet
viewImg.jsp:
下面是截图:
关键的代码我都已经贴出来了,就上面的这些,其他的源代码,我现在也没有了。不好意思。
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
JSP页面:
<%@ page contentType="text/html;charset=UTF-8" %> <%@page import="com.pdcss.bmxxfb.model.*" %> <%@ include file="/commons/taglibs.jsp" %> <style> .perview {width:200px;background:#fff;font-size:12px; border-collapse:collapse;} .perview td, .perview th {padding:0px;border:0px;} .perview th {background-color:#f0f0f0; height:20px;} .perview a:link, .perview a:visited, .perview a:hover, .perview a:active {color:#00F;} .perview table{ width:100%;border:1px solid #ccc;border-collapse:collapse;} </style> <script type="text/javascript" src="${ctx}/scripts/imgPreview/CJL.0.1.min.js"></script> <script type="text/javascript" src="${ctx}/scripts/imgPreview/QuickUpload.js"></script> <script type="text/javascript" src="${ctx}/scripts/imgPreview/ImagePreviewd.js"></script> <script type="text/javascript"> <!-- //处理文件上传后的回调,如果成功,则关闭当前窗口,刷新index function callback(flag,msg){ if(flag=='true'){ $("#pdtpNewForm").parent().parent().hide(); navTab.reload('/bmxxfb/wzxxfbpdtp/manager'); }else{ alert(msg); } } //提交之前检查各字段 function checkPdtpSubmit(){ var zzdm = $("#pdtpNewForm #zzdm"); if(zzdm.val().trim() ==""){ alert("组织代码不能为空!"); zzdm.focus(); return false; } var bmdm = $("#pdtpNewForm #bmdm"); if(bmdm.val().trim() ==""){ alert("组织代码不能为空!"); bmdm.focus(); return false; } var tpbt = $("#pdtpNewForm #tpbt"); if(tpbt.val().trim() ==""){ alert("飘动主题不能为空!"); tpbt.focus(); return false; } var tplj = $("#pdtpNewForm #tplj"); if(tplj.val().trim() ==""){ alert("链接地址不能为空!"); tplj.focus(); return false; } var imgFile = $("#pdtpNewForm #imgFile"); if(imgFile.val().trim() ==""){ alert("图片不能为空"); imgFile.focus(); return false; } var extStart=imgFile.val().lastIndexOf("."); var ext=imgFile.val().substring(extStart,imgFile.val().length).toLowerCase(); if(ext!=".bmp"&&ext!=".png"&&ext!=".gif"&&ext!=".jpg"&&ext!=".jpeg"){ alert("图片限于bmp,png,gif,jpeg,jpg格式"); imgFile.focus(); return false; } var regl=/^\+?[1-9][0-9]*$/; var kd = $("#pdtpNewForm #kd"); if(!regl.test(kd.val())){ alert("宽度应该为正整数!"); kd.focus(); return false; } if(parseInt(kd.val())>225){ alert("宽度不能超过225!"); kd.focus(); return false; } var gd = $("#pdtpNewForm #gd"); if(!regl.test(gd.val())){ alert("宽度应该为正整数!"); gd.focus(); return false; } if(parseInt(gd.val())>200){ alert("高度不能超过200!"); gd.focus(); return false; } return true; } function changeValue(flag){ if(flag=='kd'){ $("#pdtpNewForm #kd").val($("#kd_tem").val()); } if(flag == 'gd'){ $("#pdtpNewForm #gd").val($("#gd_tem").val()); } } var ip = new ImagePreview( $$("imgFile"), $$("idImg"),{ maxWidth: 225, maxHeight: 170, action: "viewImg.jsp" }); ip.img.src = ImagePreview.TRANSPARENT; ip.file.onchange = function(){ var imgFile = $("#pdtpNewForm #imgFile"); if(imgFile.val().trim() ==""){ alert("图片不能为空"); imgFile.focus(); return false; } var extStart=imgFile.val().lastIndexOf("."); var ext=imgFile.val().substring(extStart,imgFile.val().length).toLowerCase(); if(ext!=".bmp"&&ext!=".png"&&ext!=".gif"&&ext!=".jpg"&&ext!=".jpeg"){ alert("图片限于bmp,png,gif,jpeg,jpg格式"); imgFile.focus(); return false; } ip.preview(); $("#idImg").attr("src","data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); }; $(document).ready(function(){ $("#idImg").attr("src","data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); }); //--> </script> <form:form method="post" action="${ctx}/wzxxfbpdtp/save" target="hidden_frame" id="pdtpNewForm" enctype="multipart/form-data" modelAttribute="wzXxfbPdtp"> <div class="pageContent" layoutH="30"> <div class="pageFormContent" align="center" style="overflow: hidden;"> <input type="hidden" id="pkid" name="pkid" value="${wzXxfbPdtp.pkid}"/> <input type="hidden" name="imgPath" id="imgPath" /> <input type="hidden" name="testH" value="testH"> <table align="center" width="500px" height="300px" border="0" cellpadding="0" cellspacing="0" style="margin-top: 10px;text-align: center;border-spacing: 10px;"> <tr> <td align="right" width="70px"> <%=WzXxfbPdtp.ALIAS_ZZDM%>: </td> <td width="120px"> <form:input path="zzdm" id="zzdm" size="25" readonly="true" value="${zzdm }" maxlength="50" /> </td> <td width="225px" rowspan="6"> <table border="0" cellpadding="0" cellspacing="0"> <tr><th bgcolor="#f0f0f0" style="line-height: 25px;"><center>预览图</center></th></tr> <tr> <td> <div style="width: 225px;height: 170px;border:1px solid #99BBE8"> <table border="0" class="perview"> <tr> <td align="center"><img id="idImg"/></td> </tr> </table> </div> </td> </tr> </table> </td> </tr> <tr> <td width="70px"> <label for="bmdm"><%=WzXxfbPdtp.ALIAS_BMDM%>:</label> </td> <td width="120px"> <form:input path="bmdm" id="bmdm" size="25" readonly="true" value="${bmdm }" maxlength="50" /> </td> </tr> <tr> <td width="70px"> <label for="tpbt"><%=WzXxfbPdtp.ALIAS_TPBT%>:</label> </td> <td width="120px"> <form:input path="tpbt" id="tpbt" size="25" cssClass="required" maxlength="100" /> </td> </tr> <tr> <td width="70px"> <label for="tplj"><%=WzXxfbPdtp.ALIAS_TPLJ%>:</label> </td> <td width="120px"> <form:input path="tplj" id="tplj" size="25" cssClass="required" maxlength="1000" /> </td> </tr> <tr> <td width="70px"> 图片宽高: </td> <td width="120px"> <table> <tr> <td> <input id="kd_tem" name="kd_tem" value="160" onchange="javascript:changeValue('kd');" size="8" maxlength="4"> <input type="hidden" id="kd" name="kd" value="160"> </td> <td> 单位(px)</td> </tr> </table> </td> </tr> <tr> <td width="70px"> <label for="gd"><%=WzXxfbPdtp.ALIAS_GD%>:</label> </td> <td width="120px"> <table> <tr> <td> <input id="gd_tem" name="gd_tem" value="100" size="8" maxlength="4" onchange="javascript:changeValue('gd');"> <input type="hidden" id="gd" name="gd" value="100"> </td> <td> 单位(px)</td> </tr> </table> </td> </tr> <tr> <td colspan="2" width="190px"> <label for="sfpd"><%=WzXxfbPdtp.ALIAS_SFPD%>:</label> <label><input type="radio" name="sfpd" value="1" checked="checked">飘动</label> <label><input type="radio" name="sfpd" value="0">不飘动</label> </td> <td><font color="red">只允许上传1M内jpg,jpeg,gif,png格式图片</font></td> </tr> <tr> <td width="70px">选择图片</td> <td colspan="2"><input id="imgFile" name="imgFile" type="file" /></td> </tr> </table> </div> </div> <iframe name="hidden_frame" id="hidden_frame" src="message.html" style="display:none"></iframe> <div class="formBar"> <ul> <li> <div class="buttonActive"><div class="buttonContent"><button type="submit" onclick="return checkPdtpSubmit();">保存</button></div></div> </li> <li> <div class="button"><div class="buttonContent"><button type="button" class="close">关闭</button></div></div> </li> </ul> </div> </form:form>
2 后台Controller
import java.io.File; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import javacommon.base.BaseRestSpringController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import cn.org.rapid_framework.page.Page; import cn.org.rapid_framework.web.scope.Flash; import com.common.consts.StaticDict; /** * @author pdcss * 这里是控制层,用于编写页面跳转控制,容器变量管理,JavaBean收集传递的代码 * 严禁出现 SQL,HQL,HTML,JS,CSS代码 * 可以将其他service层注入这里,但严禁将dao层注入这里 * */ @Controller @RequestMapping("/wzxxfbpdtp") public class WzXxfbPdtpController extends BaseRestSpringController<WzXxfbPdtp,java.lang.String>{ //默认多列排序,example: username desc,createTime asc protected static final String DEFAULT_SORT_COLUMNS = ""; private WzXxfbPdtpManager wzXxfbPdtpManager; private final String LIST_ACTION = "redirect:/wzxxfbpdtp/manager"; /** * 增加setXXXX()方法,spring就可以通过autowire自动设置对象属性,注意大小写 **/ public void setWzXxfbPdtpManager(WzXxfbPdtpManager manager) { this.wzXxfbPdtpManager = manager; } /** binder用于bean属性的设置 */ @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); } /** * 增加了@ModelAttribute的方法可以在本controller方法调用前执行,可以存放一些共享变量,如枚举值,或是一些初始化操作 */ @ModelAttribute public void init(ModelMap model) { model.put("now", new java.sql.Timestamp(System.currentTimeMillis())); /** * 读入静态字典 */ StaticDict.fillMapAll(model); } /** * 初始化新增,修改,查询列表页面数据 * @param model */ public void initAddAndUpdate(ModelMap model) { } /** 保存新增,@Valid标注spirng在绑定对象时自动为我们验证对象属性并存放errors在BindingResult */ @SuppressWarnings("unchecked") @RequestMapping(value = "/save") public String create(ModelMap model,@Valid WzXxfbPdtp wzXxfbPdtp,HttpServletRequest request,HttpServletResponse response)throws Exception { DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); upload.setHeaderEncoding("utf-8"); List fileList=null; try { fileList = upload.parseRequest(request); } catch (FileUploadException e1) { e1.printStackTrace(); } //根路径 String root=request.getSession().getServletContext().getRealPath(""); //图片保存完整路径 String savePath = root+File.separator+"pdtpFolder"+File.separator; File f1 = new File(savePath); if (!f1.exists()) { f1.mkdirs(); } //图片名称 String name = ""; //新生成的图片名称 String newName = ""; //扩展名 String extName = ""; String message = ""; boolean flag = true; Iterator<FileItem> it = fileList.iterator(); while (it.hasNext()) { FileItem item = it.next(); //给取表单域的值,赋给wzXxfbPdtp对象 setFormFields(wzXxfbPdtp, item); // 如果是文件类型字段 if (!item.isFormField()) { name = item.getName(); long size = item.getSize(); if(size>(1024*1024)){ message="文件"+item.getName()+"大超过了1M,上传失败!"; break; } // 扩展名格式: if (name.lastIndexOf(".") >= 0) { extName = name.substring(name.lastIndexOf(".")); } // 定义允许上传的文件类型 List<String> fileTypes = new ArrayList<String>(); fileTypes.add(".jpg"); fileTypes.add(".jpeg"); fileTypes.add(".gif"); fileTypes.add(".png"); if(!fileTypes.contains(extName.toLowerCase())){ message = "只允许上传jpg,jpeg,gif,png格式的图片"; flag = false; } if(flag) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ssSSS"); Calendar calendar = Calendar.getInstance(); //以当前时间为文件名 格式如:2011-09-03-19-30-36047 newName = df.format(calendar.getTime()); //name = UUID.randomUUID().toString(); File newFile = new File(savePath + newName + extName); item.write(newFile); message="上传文件"+item.getName()+"成功"; model.addAttribute("successFileName",newName + extName); //设置图片的相对地址 wzXxfbPdtp.setTpdz("pdtpFolder/"+newName+extName); //图片原名称 wzXxfbPdtp.setTpmc(name); } } } wzXxfbPdtpManager.save(wzXxfbPdtp); // dwzCallback(model,CREATED_SUCCESS); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); out.write("<script>parent.callback('"+flag+"','"+message+"')</script>"); // return LIST_ACTION; return null; } /** 保存更新,@Valid标注spirng在绑定对象时自动为我们验证对象属性并存放errors在BindingResult */ @SuppressWarnings("unchecked") @RequestMapping(value="/{id}/update",method=RequestMethod.POST) public String update(ModelMap model,@PathVariable java.lang.String id,@Valid WzXxfbPdtp wzXxfbPdtp,BindingResult errors,HttpServletRequest request,HttpServletResponse response) throws Exception { DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); upload.setHeaderEncoding("utf-8"); List fileList=null; try { fileList = upload.parseRequest(request); } catch (FileUploadException e1) { e1.printStackTrace(); } String root=request.getSession().getServletContext().getRealPath(""); String savePath = root+File.separator+"pdtpFolder"+File.separator; File f1 = new File(savePath); if (!f1.exists()) { f1.mkdirs(); } String name = ""; String newName = ""; String extName = ""; String message = ""; //修改之前 图片地址 String oldFilePath = ""; boolean flag = true; wzXxfbPdtp.setPkid(id); Iterator<FileItem> it = fileList.iterator(); while (it.hasNext()) { FileItem item = it.next(); setFormFields(wzXxfbPdtp, item); if(item.isFormField()){ String field = item.getFieldName(); if(field.equals("oldFilePath")){ oldFilePath = item.getString("utf-8"); wzXxfbPdtp.setTpdz(oldFilePath); } if(field.equals("tpmc")){ wzXxfbPdtp.setTpmc(item.getString("utf-8")); } } if (!item.isFormField()) { name = item.getName(); if(name != null && !"".equals(name)){ long size = item.getSize(); if(size>(1024*1024)){ message="文件"+item.getName()+"大超过了1M,上传失败!"; break; } // 扩展名格式: if (name.lastIndexOf(".") >= 0) { extName = name.substring(name.lastIndexOf(".")); } // 定义允许上传的文件类型 List<String> fileTypes = new ArrayList<String>(); fileTypes.add(".jpg"); fileTypes.add(".jpeg"); fileTypes.add(".gif"); fileTypes.add(".png"); if(!fileTypes.contains(extName.toLowerCase())){ message = "只允许上传jpg,jpeg,gif,png格式的图片"; flag = false; } if(flag) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ssSSS"); Calendar calendar = Calendar.getInstance(); //以当前时间为文件名 格式如:2011-09-03-19-30-36047 newName = df.format(calendar.getTime()); //name = UUID.randomUUID().toString(); File newFile = new File(savePath + newName + extName); item.write(newFile); message="上传文件"+item.getName()+"成功"; model.addAttribute("successFileName",newName + extName); //设置图片的相对地址 wzXxfbPdtp.setTpdz("pdtpFolder/"+newName+extName); //图片原名称 wzXxfbPdtp.setTpmc(name); } } } } wzXxfbPdtpManager.update(wzXxfbPdtp); if(name != null && !"".equals(name) && flag == true){ File oldImg = new File(root+File.separator+oldFilePath); if(oldImg.exists()){ oldImg.delete(); } } // dwzCallback(model,UPDATE_SUCCESS); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); out.write("<script>parent.callbackEdit('"+flag+"','"+message+"')</script>"); // return LIST_ACTION; return null; } /* * 因为前台Form表单的 enctype="multipart/form-data",不能再通过request.getParameter()来取得参数,只能通过以下的方法:取得Form表单各文本域的值,赋给wzXxfbPdtp对象 */ private void setFormFields(WzXxfbPdtp wzXxfbPdtp, FileItem item) throws UnsupportedEncodingException { if(item.isFormField()){ String field = item.getFieldName(); if(field.equals("zzdm")){ String zzdm = item.getString("utf-8"); wzXxfbPdtp.setZzdm(zzdm); } if(field.equals("bmdm")){ String bmdm = item.getString("utf-8"); wzXxfbPdtp.setBmdm(bmdm); } if(field.equals("tpbt")){ String tpbt = item.getString("utf-8"); wzXxfbPdtp.setTpbt(tpbt); } if(field.equals("tplj")){ String tplj = item.getString("utf-8"); wzXxfbPdtp.setTplj(tplj); } if(field.equals("kd")){ String kd = item.getString("utf-8"); wzXxfbPdtp.setKd(Integer.parseInt(kd)); } if(field.equals("gd")){ String gd = item.getString("utf-8"); wzXxfbPdtp.setGd(Integer.parseInt(gd)); } if(field.equals("sfpd")){ String sfpd = item.getString("utf-8"); wzXxfbPdtp.setSfpd(sfpd); } } } /** 删除 */ @RequestMapping(value = "/{id}/delete") public String delete(ModelMap model,@PathVariable java.lang.String id,HttpServletRequest request) { WzXxfbPdtp pdtp = wzXxfbPdtpManager.getById(id); String path = pdtp.getTpdz(); //得到图片存放的完整路径 String folder = path.substring(0, path.lastIndexOf("/")); //得到图片的名称 String name = path.substring(path.lastIndexOf("/")+1); //得到图片存放的完整路径 String savePath = request.getSession().getServletContext().getRealPath("")+File.separator+folder+File.separator+name; wzXxfbPdtpManager.removeById(id); File f1 = new File(savePath); if(f1.exists()){ f1.delete(); } dwzCallback(model,DELETE_SUCCESS); return LIST_ACTION; } /** 批量删除 */ @RequestMapping(value = "/batchDeletes") public String batchDelete(ModelMap model,@RequestParam("items") String items,HttpServletRequest request) { String[] arr_items = items.split(","); WzXxfbPdtp pdtp = null; for(int i = 0; i < arr_items.length; i++) { pdtp = wzXxfbPdtpManager.getById(arr_items[i]); wzXxfbPdtpManager.removeById(arr_items[i]); String path = pdtp.getTpdz(); //得到图片存放的完整路径 String folder = path.substring(0, path.lastIndexOf("/")); //得到图片的名称 String name = path.substring(path.lastIndexOf("/")+1); //得到图片存放的完整路径 String savePath = request.getSession().getServletContext().getRealPath("")+File.separator+folder+File.separator+name; File f1 = new File(savePath); if(f1.exists()){ f1.delete(); } } dwzCallback(model,DELETE_SUCCESS); return LIST_ACTION; } /** * DWZ 回调函数,封装了操作的结果 * * @param status */ public void dwzCallback(ModelMap model,String status){ if(CREATED_SUCCESS.equals(status) || UPDATE_SUCCESS.equals(status) || DELETE_SUCCESS.equals(status) ){ Flash.current().success(status); //存放在Flash中的数据,在下一次http请求中仍然可以读取数据,error()用于显示错误消息 /** * statusCode 200:成功 300:失败 301: */ model.addAttribute("statusCode", "200"); /** * 返回后需要刷新的 tab 的ID ,如不填写则不刷新 */ model.addAttribute("navTabId", "BM01040000"); /** * 返回后需要调用的 js 方法, closeCurrent: 关闭当前tab页(一般用于在tab页打开的新增,编辑页面) */ if(! DELETE_SUCCESS.equals(status)){ model.addAttribute("callbackType", "closeCurrent"); } /** * 返回后提示栏显示的信息 */ model.addAttribute("message", status); } } }
图片预览需要用到的js:
CJL.0.1.min.js
ImagePreviewd.js
QuickUpload.js
3下面是实现图片预览的servlet
package com.common.controller; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import sun.misc.BASE64Encoder; import javax.imageio.*; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.DeferredFileOutputStream; import org.apache.log4j.Logger; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImagePreview { private final static Logger LOGGER = Logger.getLogger(ImagePreview.class); public ImagePreview(){ } public String ProcessRequest(HttpServletRequest request) throws ServletException, IOException{ BASE64Encoder encoder = new BASE64Encoder(); byte[] bs = null; long filesize = 0; DiskFileItemFactory factory = new DiskFileItemFactory(); int width = 0; int height = 0; InputStream inputStream = null; ByteArrayOutputStream op = null; DeferredFileOutputStream dfo = null; try{ factory.setSizeThreshold(4096);// 设置缓冲,这个值决定了是fileinputstream还是bytearrayinputstream //factory.setRepository(new File("d:\\temp"));//设置临时存放目录,默认是new File(System.getProperty("java.io.tmpdir")) ServletFileUpload sfileUpLoad = new ServletFileUpload(factory); sfileUpLoad.setSizeMax(1*1024*1024);//1M List items = sfileUpLoad.parseRequest(request); Iterator it = items.iterator(); //暂时只考虑单文件 while(it.hasNext()){ FileItem fileItem = (FileItem)it.next(); if(!fileItem.isFormField()){ inputStream = fileItem.getInputStream(); filesize = fileItem.getSize(); bs = new byte[(int)filesize]; }else{ if (fileItem.getFieldName().equals("width")) { dfo = (DeferredFileOutputStream) fileItem.getOutputStream(); width = Integer.parseInt(new String(dfo.getData())); } if (fileItem.getFieldName().equals("height")) { dfo = (DeferredFileOutputStream) fileItem.getOutputStream(); height = Integer.parseInt(new String(dfo.getData())); } } } op = ResizeImg(inputStream, width, height); bs = op.toByteArray(); String imgpath = "data:image/jpeg;base64," ; String img = encoder.encode(bs); imgpath += img; return imgpath; }catch (FileUploadException e) { e.printStackTrace(); LOGGER.error(e); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e); }finally{ if(dfo != null){ dfo.close(); } if(inputStream != null){ inputStream.close(); } if(op!= null){ op.close(); } } //blankimage return "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; } //只对jpg缩放 public ByteArrayOutputStream ResizeImg(InputStream inputStream,int maxWidth,int maxHeight) throws IOException{ BufferedImage bufferimage = ImageIO.read(inputStream); int curWidth = bufferimage.getWidth(); int curHeight = bufferimage.getHeight(); // double desiredRatio = Math.min((double)(maxWidth)/(double)curWidth,(double)maxHeight/(double)curHeight); // curWidth = (int) (curWidth*desiredRatio); // curHeight = (int)(curHeight*desiredRatio); double ratio = 0; Image itemp = bufferimage.getScaledInstance(maxWidth, maxHeight, bufferimage.SCALE_SMOOTH); // 计算比例 if ((bufferimage.getHeight() > maxHeight) || (bufferimage.getWidth() > maxWidth)) { if (bufferimage.getHeight() > bufferimage.getWidth()) { ratio = (new Integer(maxHeight)).doubleValue() / bufferimage.getHeight(); } else { ratio = (new Integer(maxWidth)).doubleValue() / bufferimage.getWidth(); } AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null); itemp = op.filter(bufferimage, null); } BufferedImage bufftmp = new BufferedImage(curWidth,curHeight,BufferedImage.TYPE_INT_RGB); Graphics2D g2D = bufftmp.createGraphics(); g2D.setColor(Color.white); g2D.fillRect(0, 0, curWidth, curHeight); // g2D.drawImage(bufferimage, null, 0, 0); if (maxWidth == itemp.getWidth(null)) g2D.drawImage(itemp, 0, (maxHeight - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null); else g2D.drawImage(itemp, (maxWidth - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null); g2D.dispose(); // itemp = bufftmp; ByteArrayOutputStream op = new ByteArrayOutputStream(); JPEGImageEncoder imageEncoder = JPEGCodec.createJPEGEncoder(op); imageEncoder.encode((BufferedImage)itemp); return op; } }
viewImg.jsp:
<%@ page language="java" pageEncoding="UTF-8"%> <%@page import="com.common.controller.ImagePreview;"%> <% ImagePreview img = new ImagePreview(); out.write(img.ProcessRequest(request)); %>
下面是截图:
评论
4 楼
eric.zhang
2012-10-08
jieAmei 写道
能给我发一下这个代码吗?谢谢,452909926@qq.com
关键的代码我都已经贴出来了,就上面的这些,其他的源代码,我现在也没有了。不好意思。
3 楼
jieAmei
2012-09-19
能给我发一下这个代码吗?谢谢,452909926@qq.com
2 楼
zhanghj819
2012-07-26
能给我发一下这个代码吗?谢谢,184040434@QQ.com
1 楼
logoc
2012-02-19
能给我发一下这个代码吗?谢谢,liliang_well@126.com
发表评论
-
Springmvc3实现文件上传
2011-09-23 17:48 3998Spring自己封装了文件上传功能,可以利用 Multipar ... -
springmvc+dwz+xheditor实现上传图片及swf 视频
2011-09-23 17:30 6761注意:如果使用了apache fileupload上传方法,则 ... -
springmvc 学习笔记
2011-06-23 10:16 3421web.xml <?xml version=&quo ... -
dwr spring整合
2011-03-18 13:50 797Ajax,它使浏览器可以为 ... -
通过hibernate去调用存储过程
2011-03-18 13:44 798之前一直误以为用了hibernate之后就不可以使用存储过程了 ... -
Hibernate关系映射( 双向关联XML )
2011-01-04 16:22 861一:使用连接表的双向关联 1: 一对多(one to many ... -
Hibernate关系映射( 单向关联XML )
2011-01-04 14:23 867多对一关系: 在一的一端配置set <set na ...
相关推荐
dwz+jquery+fileupload+springmvc实现文件上传及图片预览
直接从网上荡下DWZ的dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用使用的话,里面的一些内容比较冗余,另外里面缺少权限和security,以及对postgre的数据库使用demo,而最近项目中需要开发...
SpringMVC、DWZ与iBatis是三个在Web开发中广泛应用的技术,它们分别负责不同的层面,协同工作以构建高效、灵活的Web应用程序。这里我们将深入探讨这三个技术以及它们的整合方式。 首先,SpringMVC是Spring框架的一...
【标题】"dwz+SpringMVC+mybatis"是一个基于DWZ(Dynamic Web Project)前端框架、SpringMVC后端控制器以及MyBatis持久层框架整合的Web应用开发架构。这种组合通常用于构建高效、灵活的企业级应用程序,提供从前端...
【标题】:“DWZ+SpringMVC项目” 【描述】:“DWZ框架是基于jQuery的前端UI库,常用于快速开发Web应用的用户界面。SpringMVC是Spring框架的一部分,是一个强大的后端MVC框架。将DWZ与SpringMVC结合,可以构建出...
6. **dwz+jquery+fileupload+springmvc实现文件上传及图片预览**:这是更复杂的应用,结合了DWZ(一个前端框架)、jQuery的Fileupload插件和Spring MVC,实现了文件上传并提供实时图片预览的功能。 7. **springMVC+...
SSH是Java Web开发中的经典框架组合,由Spring、Struts和Hibernate三个开源项目组成,而DWZ(Dynamic Web Zone)则是一个基于jQuery的前端UI框架。这个“hibernate3+spring2.5+struts2+dwz +项目模版生成工具”是一...
在这个相册管理系统中,DWZ UI被用于创建用户友好的界面和交互体验,例如照片的预览、上传、删除等操作。 【MVC设计模式】:MVC模式是一种软件设计模式,用于分离应用程序的不同部分,使代码更易于维护和扩展。在...
发布一个我个人开发和使用的dwz+php后台信息管理系统,希望有人喜欢。这是一个后台信息管理系统的基础架构,功能包括用户登录,角色管理,用户管理,权限管理等。在此基础上,你可以开发你需要的各种信息管理系统。 ...
标题中的“DWZ+springMvc+hibernate+ehcache 简易的后台管理+即时通讯”揭示了这个项目采用的技术栈,包括前端框架、后端框架、持久层框架以及缓存管理工具。让我们逐一深入理解这些技术点: 1. **DWZ**:DWZ全称为...
《DWZ与ThinkPHP整合构建后台管理系统:深入理解RBAC》 在当今互联网技术日新月异的时代,高效、安全的后台管理系统对于任何网站或应用来说都是至关重要的。本项目结合了DWZ(Discuz! Web Zone)前端框架与ThinkPHP...
2、将kindeditor的上传功能及文件浏览功能整合到Thinkphp中,杜绝一些安全隐患。 3、原来 DWZ官方 整合的只有文章系统,没有文章分类,我将原来的文章的数据库字段做了一些修改,增加了无限级分类。 4、修复了一些...
【标题】"DWZ+JAVA+Mybatis+SpirngMVC"揭示了这是一个基于这些技术构建的Web应用程序项目。DWZ全称为“Dynamic Web Zone”,是一个前端JavaScript框架,主要用于快速开发响应式和交互式的Web应用。Java是后端的主要...
DWZ是一款基于jQuery的前端UI框架,它的核心设计理念是简化CSS层叠问题,通过合理的布局和组件设计,让开发者能更专注于业务逻辑的实现,而不是纠结于样式细节。DWZ提供了丰富的前端组件,如表格、下拉菜单、弹窗、...
在这个"asp.net DWZ+MVC Sqlserver 入门级例子"中,我们可能看到如何在ASP.NET MVC项目中整合DWZ,实现与后端数据的交互。SQL Server作为数据库管理系统,将存储和管理项目中的数据。开发者可能学习到如何创建数据...
DWZ全称为“Design for Web Zone”,是一个基于jQuery的前端UI框架,而Struts是Apache软件基金会下的一个开源MVC(Model-View-Controller)框架,主要用于后端业务逻辑处理。这两个框架的结合,为开发者提供了从前端...
DWZ是一个基于jQuery的前端UI解决方案,它提供了丰富的组件和模板,如表格、对话框、下拉菜单等,使得开发者能够快速构建交互性强的Web应用。DWZ的设计理念是“轻量级、易用、实用”,它简化了前端页面的构建流程,...
绝对自创:dwz+ssi+oracle秒级从uml变成品 前台:dwz java层:struts2+spring+mybatis 数据库:oracle
【DWZ+Java的简单应用】是将DWZ(Dynamic Web Zone)前端框架与Java后端技术相结合,实现了一个基础的Web应用程序。DWZ是一个基于jQuery的UI库,提供了丰富的界面组件,如表格、表单、对话框、按钮等,便于快速开发...
仓储管理系统是一个基于J2EE平台的综合业务应用,它利用MVC(Model-View-Controller)设计模式,将业务逻辑、数据访问和用户界面有效地分离,以实现高效、可维护的系统开发。在这个系统中,Struts2作为控制器负责...