自己的系统中需要同时上传文件和多个name相同的文本,找了很久都没有相关的实例,没办法,只有自己根据Commons-fileupload官方的UserGuide写一个,花了半天时间。。。。希望对各位有同样需求的人士有用,呵 :)
public
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType( " text/html " );
response.setCharacterEncoding( " gb2312 " );
PrintWriter out = response.getWriter();
try {
// boolean isMultipart;
List city = new ArrayList( 1 ); // 用于保存文字的列表
if (ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold( 20 * 1024 ); // 设置缓存的大小,20K
factory.setRepository(factory.getRepository()); ; // 缓存目录/文件;
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax( 20 * 1024 * 1024 ); // 最大文件,20M
List formlists = upload.parseRequest(request);
Iterator iter = formlists.iterator();
while (iter.hasNext()){ // 循环获取表单中的内容
FileItem formitem = (FileItem)iter.next();
if (formitem.isFormField()){ // 如果是文本内容
String formname = formitem.getFieldName(); // 获取form中的名字
String formcontent = formitem.getString();
formname = new String(formname.getBytes(), " gb2312 " );
formcontent = new String(formcontent.getBytes(), " gb2312 " );
if (formname.equals( " city " )){
city.add(formcontent);
}
}
else { // 如果是文件,则保存文件
String fieldName = new String(formitem.getFieldName().getBytes(), " gb2312 " );
filename = new String(formitem.getName().getBytes(), " gb2312 " );
//
filename = filename.substring(filename.lastIndexOf( " / " ) + 1 );
// 获取纯粹的文件名
long sizeInBytes = formitem.getSize();
boolean isInMemory = formitem.isInMemory(); // 文件是否在内存中(在内存中,也有对应方法)
File savefile = new File(request.getRealPath( " / " + filename)); // 创建文件
formitem.write(savefile); // 写入文件
}
}
if ( ! city.isEmpty()){ // 判断提交的表单内容是否为空
for ( int i = 0 ;i <= city.size() - 1 ;i ++ ){
out.println((String)city.get(i));
}
}
out.println( " <div align=center>提交已经成功!</div> " );
out.println( " <div align=center><a href='advise/advise_add_new.jsp'>返回</a></div> " );
}
}
catch (Exception e){
out.println(e.toString());
}
out.flush();
out.close();
return ;
}
此示例为 servlet 的doPost()方法
根据此示例可以同时上传文件和普通文本资料。
在tomcat5. 5 .17下运行正常。
throws ServletException, IOException {
response.setContentType( " text/html " );
response.setCharacterEncoding( " gb2312 " );
PrintWriter out = response.getWriter();
try {
// boolean isMultipart;
List city = new ArrayList( 1 ); // 用于保存文字的列表
if (ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold( 20 * 1024 ); // 设置缓存的大小,20K
factory.setRepository(factory.getRepository()); ; // 缓存目录/文件;
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax( 20 * 1024 * 1024 ); // 最大文件,20M
List formlists = upload.parseRequest(request);
Iterator iter = formlists.iterator();
while (iter.hasNext()){ // 循环获取表单中的内容
FileItem formitem = (FileItem)iter.next();
if (formitem.isFormField()){ // 如果是文本内容
String formname = formitem.getFieldName(); // 获取form中的名字
String formcontent = formitem.getString();
formname = new String(formname.getBytes(), " gb2312 " );
formcontent = new String(formcontent.getBytes(), " gb2312 " );
if (formname.equals( " city " )){
city.add(formcontent);
}
}
else { // 如果是文件,则保存文件
String fieldName = new String(formitem.getFieldName().getBytes(), " gb2312 " );
filename = new String(formitem.getName().getBytes(), " gb2312 " );
//
filename = filename.substring(filename.lastIndexOf( " / " ) + 1 );
// 获取纯粹的文件名
long sizeInBytes = formitem.getSize();
boolean isInMemory = formitem.isInMemory(); // 文件是否在内存中(在内存中,也有对应方法)
File savefile = new File(request.getRealPath( " / " + filename)); // 创建文件
formitem.write(savefile); // 写入文件
}
}
if ( ! city.isEmpty()){ // 判断提交的表单内容是否为空
for ( int i = 0 ;i <= city.size() - 1 ;i ++ ){
out.println((String)city.get(i));
}
}
out.println( " <div align=center>提交已经成功!</div> " );
out.println( " <div align=center><a href='advise/advise_add_new.jsp'>返回</a></div> " );
}
}
catch (Exception e){
out.println(e.toString());
}
out.flush();
out.close();
return ;
}
此示例为 servlet 的doPost()方法
根据此示例可以同时上传文件和普通文本资料。
在tomcat5. 5 .17下运行正常。