zoukankan      html  css  js  c++  java
  • 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");

     

     Html代码 

    <%@ page contentType="text/html;charset=UTF-8" %> 
    <%@page import="com.pdcss.bmxxfb.model.*" %> 
    <%@ include file="/commons/taglibs.jsp" %> 
    <style> 
    .perview {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{ 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=" 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>&nbsp;&nbsp;单位(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>&nbsp;&nbsp;单位(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
    
    
    Java代码 
    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:
    Html代码 
    <%@ page language="java"  pageEncoding="UTF-8"%> 
    <%@page import="com.common.controller.ImagePreview;"%> 
    <% 
    ImagePreview img = new ImagePreview(); 
    out.write(img.ProcessRequest(request)); 
    %> 

    下面是截图:

     

  • 相关阅读:
    [USACO13NOV] Pogo-Cow
    《高性能Mysql》讲聚簇索引
    复合索引底层实现
    数据库索引实现(B+,B-,hash)
    B+树,B树,聚集索引,非聚集索引
    MySQL存储引擎
    synchronized实现原理
    【1】线程池的使用
    CompletionService
    原型模式
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5089452.html
Copyright © 2011-2022 走看看