struts2 空文件上传的时候,就会报文件找不到的错误,如何解决。所谓空文件,就是文件大小时0的。
java.io.FileNotFoundException: E:\webserver\ftp\upload__2b3c13fe_134e565d32c__7ffd_00000035.tmp (系统找不到指定的文件。)
求解决办法目前的做法是在服务端我会去捕获这个异常,如果出现,就创建一个空文件,但这种做法感觉有点牵强,最好struts2能处理这种空文件,不报错

解决方案 »

  1.   


    不是通过网页控件上传的,用HttpURLConnection 上传的
      

  2.   

    如果文件是0k的话,输入流好像是null啊,你可以先判断下吧?然后往里面填一些空格呗,这样文件大小就大于0了,然后就可以上传了
      

  3.   

    file标签名字是 f1的话。
    你在 Action能得到 f1FileSize, f1FileName, f1。
    看f1FileSize
      

  4.   

    我现在在做一个发邮件的功能,用户可以发带附件的,也可以发不带附件的邮件,如果第一次发了带附件的邮件,第二次再发不带附件的邮件就报跟你一样的错误,刚开始我写的条件是如果file != null就发邮件,后来想来半天又来我加上了file.length() != 0就好了 ,希望对你有帮助,反正我是解决了,呵呵,我把我代码贴出来if(file != null && file.length() > 9437184){
    return INPUT;
    }
    String toNickname = email.getToNickname();
    List<User> list = (List<User>)this.service.getUserBynickname(toNickname);//通过昵称获得收件人
    email.setEmailDate(new Date());//获取发送邮件时间
    email.setAddressee(list.get(0));//收件人
    if(file == null){
    this.service.sendEmail(email);
    }else if(file != null && file.length() != 0){
    System.out.println("上传文件!");
    if(file.length() > 9437184){
    return INPUT;
    }
    /*
     * 发送邮件附件
     */
    email.setEmailFileName(fileFileName);
    this.service.sendEmail(email);
    int userid = (Integer)ServletActionContext.getRequest().getSession().getAttribute("userid");//当前登录用户的ID
    int emailid = email.getId();//邮件的ID
    String path = "/emailFiles/" + userid + "/" + emailid;
    String realPath = ServletActionContext.getServletContext().getRealPath(path);//邮件附件保存的真实路径
    File savedir = new File(realPath);
    if(!savedir.exists()){//如果目录不存在就创建目录
    savedir.mkdirs();
    }
    File savefile = new File(savedir,fileFileName);
    FileUtils.copyFile(file, savefile);
    }