上传文件时Fileupload:parseRequest(request)为空为什么? 本帖最后由 zqb1987 于 2011-05-21 17:53:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1)我没有仔细研究你的错误之处,只是觉得你的UploadFileServlet没有我平日里用的这个经典,特别是路径选择方面,如果你不介意可以用用看。servlertimport javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import org.apache.commons.fileupload.*;import org.apache.commons.fileupload.servlet.*;import org.apache.commons.fileupload.disk.*;public class UploadServlet extends HttpServlet { private String filePath; //存放上传文件的目录 private String tempFilePath; //存放临时文件的目录 public void init(ServletConfig config)throws ServletException { super.init(config); filePath=config.getInitParameter("filePath"); tempFilePath=config.getInitParameter("tempFilePath"); filePath=getServletContext().getRealPath(filePath); tempFilePath=getServletContext().getRealPath(tempFilePath); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); //向客户端发送响应正文 PrintWriter outNet=response.getWriter(); try{ //创建一个基于硬盘的FileItem工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //设置向硬盘写数据时所用的缓冲区的大小,此处为4K factory.setSizeThreshold(4*1024); //设置临时目录 factory.setRepository(new File(tempFilePath)); //创建一个文件上传处理器 ServletFileUpload upload = new ServletFileUpload(factory); //设置允许上传的文件的最大尺寸,此处为4M upload.setSizeMax(4*1024*1024); List /* FileItem */ items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if(item.isFormField()) { processFormField(item,outNet); //处理普通的表单域 }else{ processUploadedFile(item,outNet); //处理上传文件 } } outNet.close(); }catch(Exception e){ throw new ServletException(e); } } private void processFormField(FileItem item,PrintWriter outNet) throws UnsupportedEncodingException{ String name = item.getFieldName(); String value = item.getString("UTF-8"); outNet.println(name+":"+value+"\r\n"); } private void processUploadedFile(FileItem item,PrintWriter outNet)throws Exception{ String filename=item.getName(); int index=filename.lastIndexOf("\\"); filename=filename.substring(index+1,filename.length()); long fileSize=item.getSize(); if(filename.equals("") && fileSize==0)return; File isCreat = new File("filePath"); if(!isCreat.exists()){//判断存放上传目录是否存在 isCreat.mkdirs(); } File uploadedFile = new File(filePath+"/"+filename); item.write(uploadedFile); outNet.println(filename+" is saved."); outNet.println("The size of " +filename+" is "+fileSize+"\r\n"); }}2)配置文件<servlet> <servlet-name>upload</servlet-name> <servlet-class>UploadServlet</servlet-class> <init-param> <param-name>filePath</param-name> <param-value>upload</param-value> </init-param> <init-param> <param-name>tempFilePath</param-name> <param-value>temp</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name> <url-pattern>/server/upload</url-pattern> </servlet-mapping>3)前台<form id="tul1" action="server/upload" enctype="multipart/form-data" method="post"> <input type="file" name="fname" /> <input type="button" value="提交" onclick="tul1.submit()"/></form> 此方法是用的servlet,如果您使用的框架中已经有配置一个了,比如(*.do),那么上传的这个就要在web.xml中重新配置一个servlet。如果你不重新配置,继续用原有的servlet,这样会被tomcat截获,并且把文件保存在temp文件夹下,随即命名.tmp。 java 备份 oracle jfreeChart的ant javadoc生成doc文档问题 SSH项目耦合性的问题 2个dom 节点拷贝的问题 如何控制下拉列表的显示内容? HQL一对我关联查询 为什么这么多的人去学 Struts 2 呢?难道 Javaserver Faces 不好么? Hibernate问题 input type=file 标签禁止让用户手动输入 能否给个Rmi的简单例子,包括策略文件,在线等待 svn合并时不小心删了以前没提交的代码怎么找回? 我用账户admin和密码adminadmin登陆不进去glassfish server 3.1的管理控制台
servlert
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.*;public class UploadServlet extends HttpServlet {
private String filePath; //存放上传文件的目录
private String tempFilePath; //存放临时文件的目录 public void init(ServletConfig config)throws ServletException {
super.init(config);
filePath=config.getInitParameter("filePath");
tempFilePath=config.getInitParameter("tempFilePath");
filePath=getServletContext().getRealPath(filePath);
tempFilePath=getServletContext().getRealPath(tempFilePath);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain");
//向客户端发送响应正文
PrintWriter outNet=response.getWriter();
try{
//创建一个基于硬盘的FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置向硬盘写数据时所用的缓冲区的大小,此处为4K
factory.setSizeThreshold(4*1024);
//设置临时目录
factory.setRepository(new File(tempFilePath)); //创建一个文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
//设置允许上传的文件的最大尺寸,此处为4M
upload.setSizeMax(4*1024*1024);
List /* FileItem */ items = upload.parseRequest(request); Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if(item.isFormField()) {
processFormField(item,outNet); //处理普通的表单域
}else{
processUploadedFile(item,outNet); //处理上传文件
}
}
outNet.close();
}catch(Exception e){
throw new ServletException(e);
}
} private void processFormField(FileItem item,PrintWriter outNet) throws UnsupportedEncodingException{
String name = item.getFieldName();
String value = item.getString("UTF-8");
outNet.println(name+":"+value+"\r\n");
}
private void processUploadedFile(FileItem item,PrintWriter outNet)throws Exception{
String filename=item.getName();
int index=filename.lastIndexOf("\\");
filename=filename.substring(index+1,filename.length());
long fileSize=item.getSize();
if(filename.equals("") && fileSize==0)return;
File isCreat = new File("filePath");
if(!isCreat.exists()){//判断存放上传目录是否存在
isCreat.mkdirs();
}
File uploadedFile = new File(filePath+"/"+filename);
item.write(uploadedFile);
outNet.println(filename+" is saved.");
outNet.println("The size of " +filename+" is "+fileSize+"\r\n");
}
}
2)配置文件
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>UploadServlet</servlet-class>
<init-param>
<param-name>filePath</param-name>
<param-value>upload</param-value>
</init-param>
<init-param>
<param-name>tempFilePath</param-name>
<param-value>temp</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/server/upload</url-pattern>
</servlet-mapping>
3)前台
<form id="tul1" action="server/upload" enctype="multipart/form-data" method="post">
<input type="file" name="fname" />
<input type="button" value="提交" onclick="tul1.submit()"/>
</form>