文件上传利用commons-fileupload实现,笔者的SDK中包含这个包,没有这个包的童鞋,可以google之。
<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”作为参数,这样就解决了乱码的问题。