用common-fileupload组件进行文件上传,但是获得items.size()为0。心急如焚,求大家帮帮我。

我用的是Spring MVC,其中.do请求代码如下:
[code="java"]@SuppressWarnings("static-access")
@RequestMapping("/upFile.do")
public String upFile(String fromTable,String fromIdx,HttpServletRequest request,HttpServletResponse response){
log.info("fromTable="+fromTable+"&&&&&&&fromIdx==="+fromIdx);
try {
boolean flag =fileUp.doUploadFile(fromTable,fromIdx,request,response)//处理 if(flag){
json.backJsonToHTML(response, BaseAction.ENCODING, "success");
}else{
json.backJsonToHTML(response, BaseAction.ENCODING, "fail");
}
} catch (Exception e) {
e.printStackTrace();
json.backJsonToHTML(response, BaseAction.ENCODING, "fail");
}
return null;
}[/code]

[code="java"]然后再在另一个类中处理:
@SuppressWarnings("unchecked")
public boolean doUploadFile(String fromTable,String fromIdx,HttpServletRequest request,HttpServletResponse response)throws ServletException, Exception{

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding(encoding);

List<FileItem> items = upload.parseRequest(request);

logger.info("获得的文件个数为:"+items.size()); //打印items.size()==0         
     //其他代码省略......

}[/code]

我表单中的input file是用js动态生成的,用alert打印也是对的。表单属性也设置enctype="multipart/form-data" method="post"了。但是每次都打印items.size()==0,好急啊!
起初我担心是不是我js动态生成input的时候是不是出现了错误,我这次是把form中的文本控件写死的:
[code="java"]


文件1:
文件2:
文件3:

[/code]
我按照上面的表单测试,还是不行。

我在web.xml配置为:
[code="java"] <!-- 核心 servlet 用于对于客户端的请求进行转发 -->

dsreliweb

org.springframework.web.servlet.DispatcherServlet

2


dsreliweb
*.do
[/code]
[size=large][color=blue]
求求大家帮助,谢谢!!![/color][/size]

你的配置文件有没配置

这个bean呀,好像是要对mutipatRequest进行解析吧,解析不对的话好像不行。我前阵子也写过文件上传,但好像我和你写的很不一样,我的C是用SimpleFormController,可能是我太新手了,有不对的地方请指正,呵呵~~

//分析请求地址
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace();
}
Iterator it = fileList.iterator();

        String orginal_file_name = "";//定义原始文件的名称
        String after_upload_savepath ="";//定义原始文件上传后的保存地址
        long size = 0;//大小
        try {
            while(it.hasNext()){
                FileItem item = it.next();
                if(item.getName()!=null){
                    //获得文件名称
                    orginal_file_name = item.getName();
                    size = item.getSize()/1000;
                    //获得文件后缀名称
                    //String  ext = orginal_file_name.substring(orginal_file_name.lastIndexOf(".")+1);
                    //文件目录+文件名称(有后缀的)
                    after_upload_savepath = target_dir_path+orginal_file_name;
                    File saveFile = new File(after_upload_savepath);
                    item.write(saveFile);
                }
            }

你把 HttpServletRequest
换成 MultipartHttpServletRequest

试试,也许可以了

你把那个
List items = upload.parseRequest(request);

那个尖括号去掉看看
List items = upload.parseRequest(request);
然后再看看,items的size是不是0

贴一段我短时间用的代码块
public static void Upload(HttpServletRequest request,HttpServletResponse response) throws Exception{
String SavePath = request.getSession().getServletContext().getRealPath("/")+"upload/";

String SaveUrl = "/upload/" ;

String[] ExtArr = new String[]{ ".gif" , ".jpg" , ".png" , ".bmp" };

int MaxSize = 10*1024*1024 ;

String Msg1 = "上传文件大小超过限制。" ;

String Msg2 = "上传文件的扩展名不被允许。" ;

String Msg3 = "文件上传失败。" ;

String Msg=Msg3;

Date dt = new Date();

Random random = new Random();

random.nextInt();

String FileNameAuto = String.format( "%X_%X" , new Object[]{ new Integer(( int )(dt.getTime())), new Integer(random.nextInt())});

String FilePath = null ;

String FileUrl = null ;

DiskFileUpload fu = new DiskFileUpload();

fu.setSizeMax(MaxSize); //

fu.setSizeThreshold( 4096 );

fu.setRepositoryPath( "/" );

List fileItems = fu.parseRequest(request);
Iterator iter = fileItems.iterator();

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next();

String fieldName = item.getFieldName();
if (!item.isFormField()) {

String name = item.getName();

long size = item.getSize();

if ((name== null ||name.equals( "" )) && size== 0 )

continue ;

if (size>MaxSize) {

Msg=Msg1;

break ;

}

int pos = name.lastIndexOf( "." );

String ext = name.substring(pos);

boolean b= false ;

for ( int m= 0 ;m<ExtArr.length; m++){

if (ExtArr[m].equalsIgnoreCase(ext)){

b= true ;

break ;

}

}

if (b== false ){

Msg=Msg2;

break ;

}

FilePath = SavePath + FileNameAuto+ext;

FileUrl = SaveUrl + FileNameAuto+ext;

java.io.File f= new java.io.File(FilePath);

item.write(f);

}
}
PrintWriter out=response.getWriter();
out.print(FileUrl);
}

补充下 现在DiskFileUpload已经被DiskFileItemFactory 和ServletFileUpload 替代,所以稍微改东西,我做的是图片上传,成功后并返回路径以便预览.......
[code="java"]
public static void Upload(HttpServletRequest request,
HttpServletResponse response) throws Exception {
PrintWriter out = encodehead(request, response);

    String SavePath = request.getSession().getServletContext().getRealPath("/")+"upload/";   
    String SaveUrl = "/upload/" ;  
    String[] ExtArr =  new  String[]{ ".gif" , ".jpg" , ".png" , ".bmp" };   
    String FilePath = null;
    String FileUrl = null;
    int MaxSize = 10 * 1024 * 1024;// 10M
    String Msg1 = "上传文件大小超过限制。";
    String Msg2 = "上传文件的扩展名不被允许。";
    String Msg3 = "文件上传失败。";
    String Msg = Msg3;
    try {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096 * 100);// 设置缓冲区大小 400K
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(MaxSize);// 最大请求大小
        // 解析表单传递过来的数据,返回List集合数据-类型:FileItem
        List fileItems = upload.parseRequest(request); 
        Iterator iter = fileItems.iterator();
        while (iter.hasNext()) {
            Date dt = new Date();
            Random random = new Random();
            random.nextInt();
            String FileNameAuto = String.format("%X_%X", new Object[] {
                    new Integer((int) (dt.getTime())),
                    new Integer(random.nextInt()) });
            FileItem item = (FileItem) iter.next();
            if (!item.isFormField()) {
                String name = item.getName();
                long size = item.getSize();
                if ((name == null || name.equals("")) && size == 0)
                    continue;
                if (size > MaxSize) {
                    Msg = Msg1;
                    break;
                }
                int pos = name.lastIndexOf(".");
                String ext = name.substring(pos);
                boolean b = false;
                for (int m = 0; m < ExtArr.length; m++) {
                    if (ExtArr[m].equalsIgnoreCase(ext)) {
                        b = true;
                        break;
                    }
                }
                if (b == false) {
                    Msg = Msg2;
                    break;
                }
                FilePath = SavePath + FileNameAuto + ext;
                FileUrl = SaveUrl + FileNameAuto + ext;
                java.io.File f = new java.io.File(FilePath);
                item.write(f);
                out.print(FileUrl);
            }
        }
    } catch (Exception e) {
        out.print(Msg);
    }
}
private static PrintWriter encodehead(HttpServletRequest request,
        HttpServletResponse response) throws IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html; charset=utf-8");
    return response.getWriter();
}

[/code]代码

[quote]
ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding(encoding);

List items = upload.parseRequest(request);

[/quote]

DiskFileUpload upload = new DiskFileUpload();
List items= upload.parseRequest(request);

将ServletFileUpload改用这个org.apache.commons.fileupload.DiskFileUpload类试试~ 我的项目是用这个的~

[table]
|[table]|
||[table]||
|||[table]|||
||||[table]||||
|||||[table]|||||
||||||[table]||||||
|||||||[table]|||||||
||||||||[table]||||||||
|||||||||[table]|||||||||
||||||||||[table]||||||||||
|||||||||||[flash=200,200][url][url][list]|||||||||||
|||||||||||[*][code="java"][quote][u][/u][/quote][/code]|||||||||||
|||||||||||[/list][/url][/url][/flash]|||||||||||
||||||||||[/table]||||||||||
|||||||||[/table]|||||||||
||||||||[/table]||||||||
|||||||[/table]|||||||
||||||[/table]||||||
|||||[/table]|||||
||||[/table]||||
|||[/table]|||
||[/table]||
|[/table]|
[/table]