Servlet 知识点(三) -- Servlet 的文件上传功能的表单获取问题(2)

来源:互联网 发布:nginx与phpfpm 编辑:程序博客网 时间:2024/06/07 19:46

上周用 smartUpload 因为性能的关系被无情抛弃了 , 百度了一波之后采用了 common-io 和 common-lang 的上传方式 . 对于表单传值 , 他们也有很好的解决办法
common-io: http://download.csdn.net/detail/jacxuan/9882524

//判断表单是否二进制流提交数据  boolean isMultipart = ServletFileUpload.isMultipartContent(request);          if(!isMultipart){              throw new RuntimeException("请检查您的表单的enctype属性,确定是multipart/*");          }          DiskFileItemFactory dfif = new DiskFileItemFactory();          ServletFileUpload parser = new ServletFileUpload(dfif);          parser.setFileSizeMax(3*1024*1024);//设置单个文件上传的大小          parser.setSizeMax(6*1024*1024);//多文件上传时总大小限制          //文件根目录        String uploadPath = fileRoot  + File.separator;        //保存表单数据,以便在之后取出       Map<String,String> map = new HashMap<String, String>();        try {            List<?> items = parser.parseRequest(request);            Iterator iter = items.iterator();            if (items != null && items.size() > 0) {                // 迭代表单数据                while (iter.hasNext()) {                      FileItem item = (FileItem) iter.next();                      if (item.isFormField()) {                          //如果是普通表单字段                          String name = item.getFieldName();  //获得表单name字段名称                        String value = item.getString();  //获得表单name字段名称对应的值                        map.put(name, value);                        log.info("name={},value={}",name,value);                    } else if (!item.isFormField()&&item.getName()!=null) {                        String fileName = new File(item.getName()).getName();                        if(fileName == null || "".equals(fileName)){                            continue;                        }                        String filePath = uploadPath  + fileName;                        map.put("filePath",filePath);                        File storeFile = new File(filePath);                        // 在控制台输出文件的上传路径                        System.out.println(filePath);                        // 如果文件不存在则保存到指定文件夹否则直接返回                        if(!storeFile.exists())                            item.write(storeFile);                        request.setAttribute("message",                            "文件上传成功!");                        continue;                    }                }            }        } catch (Exception e) {             request.setAttribute("message","错误信息: " + e.getMessage());        }

jsp

<form action="http://f6fc9999.ngrok.io/souvx/sendMsgServlet"        method="post" enctype="multipart/form-data">        <div id="sendOptionDiv" class="sendOptionDiv">            <select name="sendOption" id="sendOption">                <option selected="selected">===群发方式===</option>                <option value="1">发送至所有人</option>                <option value="2">发送至指定人群</option>            </select>        </div>        <div id="openDiv">            <select name="cOpenid" id="cOpenid" multiple="multiple" size="4">            </select>        </div>        <div id="chooseStyleDiv">            <select name="chooseStyle" id="chooseStyle">                <option selected="selected">===群发类型===</option>                <option value="1">发送文本消息</option>                <option value="2">发送媒体消息</option>                <option value="3">发送图文消息</option>            </select>        </div>        <div id="contentId">            <input type="text" value="" name="content" id="content" />        </div>        <div id="mediaId">        <input type="file"  name="mytext" id="mytext" />        </div>        <div id="newsDiv">            <ul>                <li>作者:<input type="text" value="" name="author" id="author" /></li>                <li>标题:<input type="text" value="" name="title" id="title" /></li>                <li>链接:<input type="text" value="" name="content_source_url"                    id="content_source_url" /></li>                <li>内容描述<input type="text" value="" name="digest" id="digest" />                </li>                <li>是否在重复时发送:<input type="text" value="" name="show_cover_pic"                    id="show_cover_pic" /></li>            </ul>        </div>        <input type="submit" value="提交" />    </form>
原创粉丝点击