package demo.file.upfileDemo;import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UpfileDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK");
boolean isMultipart =ServletFileUpload.isMultipartContent(request);
if(!isMultipart){
response.sendError(500,"找不到文件");
return;
}
//构造文件上传对象
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析请求
try {
List<FileItem> list = upload.parseRequest(request);
//表单控件的名和值
for(FileItem item:list){
if(item.isFormField()){
String  name=item.getFieldName();
String value=item.getString("GBK");
System.out.println("name:"+name);
System.out.println("value:"+value);

}
else{
//文件上传
//文件名
String fileName = item.getName();
//文件大小
long size = item.getSize();
System.out.println("文件名:"+fileName);
System.out.println("文件大小:"+size);
//构造目录路径
String path = this.getServletContext().getRealPath("/file");
if(fileName.contains("\\")){
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
}
System.out.println("文件名是:"+fileName);

String str = fileName.substring(fileName.lastIndexOf("."));
String time = System.currentTimeMillis()+"";
//fil.renameTo(new File(time+str));
//File fil= new File(path,filename);
File fil= new File(path,fileName);

item.write(fil);

}
}
} catch (FileUploadException e) {

e.printStackTrace();
}
catch (Exception e) {

e.printStackTrace();
}
System.out.println("文件上传成功!");
//String path= this.getServletContext().getRealPath("/file");
//File src = new File(path);
//String[] fileName = src.list();
//request.setAttribute("file", fileName);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}}
为什么只有
name:name
value:sss
name:password
value:sss
而else内的上传文件部分却没执行

解决方案 »

  1.   

    你的jsp的form加上 enctype="multipart/form-data" 没有啊?如果加了我就不知道了。。
      

  2.   

    另外就是,你执行了if,当然不执行else了
      

  3.   

    你把 红色的去掉试试吗
    System.out.println("name:"+name);
    System.out.println("value:"+value);}
    else{

    //文件上传
    //文件名 
      

  4.   

    /文件上传 
    //文件名 
    String fileName = item.getName(); 
    你这里的item在哪里定义的?
    居然能编译通过,佩服啦
      

  5.   


    这里
    //表单控件的名和值
    for(FileItem item:list){ 
      

  6.   

    ??哪有既执行if又执行else的
    比如说 输入0就输出男 else输出女你在外面输入一个0进去 难道又输出男 又输出女啊
      

  7.   

    他的意思是,既然执行了IF的语句,ELSE后面的就不执行了。不是说两个都做
      

  8.   

    if(item.isFormField()){
    String  name=item.getFieldName();
    String value=item.getString("GBK");
    System.out.println("name:"+name);
    System.out.println("value:"+value);} 
    程序执行了IF所以就得到下面:
    name:name
    value:sss
    name:password
    value:sss 既然是这样,ELSE后面的代码可能不执行啦
      

  9.   

    enctype="multipart/form-data"这个有吗
      

  10.   

    enctype="multipart/form-data"
    这是是上传文件需要用到的属性,写在form表单中  
    if(item.isFormField()) 这个地方是判断是不是表单控件的
    估计你的可能没有写 上传文件控件  file,没有可上传的东西