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

上周用 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>

你可能感兴趣的:(servlet)