使用commons-fileupload实现文件(doc、pdf)上传,提取表单参数并解决中文乱码

文件上传利用commons-fileupload实现,笔者的SDK中包含这个包,没有这个包的童鞋,可以google之。

利用HTML表单:

<form name="add_document" action="../Servlet/DocServlet?opType=add" method="post" enctype="multipart/form-data">

向Servlet发送上传文件的请求,因为将 enctype设置成 "multipart/form-data",所以后台使用request.getParameter(para)无法提取参数的值。
只能通过FileItem类型获取表单中的元素,包括文件内容:

DiskFileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload upload = new ServletFileUpload(factory);  
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem > iter = items.iterator();

通过对iter的遍历提取参数:

 FileItem fileItem = null;
 while (iter.hasNext()) { 
fileItem = iter.next();
if (fileItem.isFormField()) {
if(fileItem.getFieldName().equals("docuser")) {
username = fileItem.getString("gbk");
} else if (fileItem.getFieldName().equals("doctype")) {
docType = fileItem.getString("gbk");
} else if (fileItem.getFieldName().equals("docdepartment")) {
department = fileItem.getString("gbk");
 }
}else {
fileName = fileItem.getName();  
if (fileName != null) {
in = fileItem.getInputStream();
 }
 }
 } //while
上述代码中的:

isFormField()函数用来判断遍历到的元素是否是表单中的元素;
getFieldName()函数用来提取参数的名称;
getString()用来提取参数的值;
getInputStream()用来提取文件字节流。

当传递的参数为中文时,这就涉及到字符编码的问题了。本人网站采用的gbk进行编码,所以当使用 getString()函数提取参数的值时,使用“gbk”作为参数,这样就解决了乱码的问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值