您的位置:首页 > 其它

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

2017-06-28 09:35 281 查看
上周用 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
相关文章推荐