spring MVC 实现上传

一.Controller 代码

/**

     * 上传表单文件
     * @param request
     * @param response
     * @param modelMap
     * @throws IOException
     * 创建人:cj  
     * 创建时间:2012-8-16 上午10:11:38
     */
    @RequestMapping("/file")
    public void upload(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        String projectAbsolutePath = request.getRealPath("/");
        final long MAX_SIZE = 20 * 1024 * 1024;// 设置上传文件最大为20M
        response.setContentType("text/html");
        // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
        DiskFileItemFactory dfif = new DiskFileItemFactory();
        dfif.setSizeThreshold(40960);// 设置上传文件时用于临时存放文件的内存大小,这里是4M.多于的部分将临时存在硬盘
        dfif.setRepository(new File(request.getRealPath("/") + "/WEB-INF/uploadtemporaryfile"));// 设置存放临时文件的目录,web根目录下的uploadtemporaryfile目录
        // 用以上工厂实例化上传组件
        ServletFileUpload sfu = new ServletFileUpload(dfif);
        sfu.setHeaderEncoding("UTF-8");
        // 设置最大上传尺寸
        sfu.setSizeMax(MAX_SIZE);
        // 从request得到 所有 上传域的列表
        List fileList = null;
        try {
            fileList = sfu.parseRequest(request);
        } catch (Exception e) {
            log.info("上传文件有错误" + e);
        }
        // 过滤掉的文件类型
        String[] errorType = { "exe", "com", "cgi", "asp", "bak" };
        // 得到所有上传的文件
        Iterator fileItr = fileList.iterator();
        // 循环处理所有文件
        while (fileItr.hasNext()) {
            FileItem fileItem = null;
            String path = null;
            long size = 0;
            // 得到当前文件
            fileItem = (FileItem) fileItr.next();
            // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
            if (fileItem == null || fileItem.isFormField()) {
                continue;
            }
            String fileencode = filechar.guestFileEncoding(fileItem);
            if ("UTF-8".equals(fileencode) || "utf-8".equals(fileencode)) {
                // 得到文件的完整路径
                path = fileItem.getName();
                // 得到文件的大小
                size = fileItem.getSize();
                // 得到去除路径的文件名
                String t_name = path.substring(path.lastIndexOf("\\") + 1);
                // 得到文件的扩展名(无扩展名时将得到全名)
                String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
                for (int temp = 0; temp < errorType.length; temp++) {
                    if (t_ext.equals(errorType[temp])) {
                        response.getWriter().write(ErrJsonUitl.errJsonObject("306", "上传文件不是HTML请重新上传").toString());
                        return;
                    }
                }

                long now = System.currentTimeMillis();
                // 根据系统时间生成上传后保存的文件名
                String prefix = String.valueOf(now);
                // 保存的最终文件完整路径,保存在web根目录下的uploadfile目录下
                //    String u_name = request.getRealPath("/") + "WEB-INF/uploadfile/" + prefix + "." + t_ext;
                String u_name = "WEB-INF/uploadfile/" + prefix + "." + t_ext;
                try {
                    // 保存文件
                    fileItem.write(new File(projectAbsolutePath + u_name));
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("form_path", u_name);
                    HtmlParser htmlParser = new HtmlParser();
                    if (htmlParser.textName(projectAbsolutePath + u_name).size() == 0) {
                        response.getWriter().write(ErrJsonUitl.errJsonObject("207", "上传表单不能为空").toString());
                    } else {
                        response.getWriter().write(jsonObject.toString());
                    }

                } catch (Exception e) {
                    log.info("上传文件错误" + e);
                }
            } else {
                response.getWriter().write(ErrJsonUitl.errJsonObject("308", "上传文件编码格式化不正确请用文本编辑编辑成UTF-8的格式" + fileencode).toString());
            }
        }

    }


二上传页面

   <form id="uploadservlt" method="post" action="upload/file"
                enctype="multipart/form-data">
                <font color="red">上传文件必须是UTF-8编码格式,文件上传前请用文本编辑器设置一下编码格式,否则会出现乱码情况</font>
                </br>
                <input type="file" name="file" id="file">
                <input type="button" value="上传" οnclick="uploadfile()">
            </form>

三上传JS

   function uploadfile() {
    if($("#file").val().length==0){
        $.messager.alert('提示', "上传文件不能为空");
         return false;

    }
    $("#uplocadperson").val($("#userNameOpenShopApply").val());
    $('#uploadservlt').ajaxSubmit({
        success : function(html, status) {
    
            var jsonobj = eval('(' + html + ')');
            if(jsonobj.errorCode==null){
                $('#forminfo').form('clear');
                $("#formPath").val(jsonobj.form_path);
                $("#forminfodiv").dialog('open').dialog('setTitle', '表单信息填写');
            }else{
                $.messager.alert('提示', jsonobj.errorMessage);
            }
            
        }
    });
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值