我的STRUTS2文件上传的时候,有的文件能上传成功,有的不能成功,不知道是什么原因。请高手指教。
下面是我的部分代码:
struts.xml
<constant name="struts.i18n.encoding" value="gbk"/>
<constant name="struts.multipart.saveDir" value="c:\"/> <action name="createSpace" class="last.soul.action.CreateSpaceAction"
       method="createSpace">
    <result name="success" >/pages/member/member_space.jsp</result>
    <result name="input" >/pages/member/member_space.jsp</result>

    <interceptor-ref name="fileUpload">
<param name="maximumSize">409600</param>
<param name="allowedTypes">image/bmp,image/gif,image/jpeg</param>
   </interceptor-ref>
   <interceptor-ref name="defaultStack"></interceptor-ref>
</action>jsp文件
上传时的代码:<s:file name="icon"  cssStyle="width:200;height:25"></s:file>
显示时的代码:<img src="<s:url value='%{#session.member.memberSpace.icon}'/>" />
action文件省略,因为有的文件能上传成功,所以可能不是这里的问题。另外我在web.xml里配置了一个文件上传的辅助类(struts2本身提供的)。
<filter>
<filter-name>struts2-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter><filter-mapping>
<filter-name>struts2-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

解决方案 »

  1.   

    我上传的是同一文件夹下,同一文件类型的图片(.gif)的文件,那些比较小的文件都可以上传成功,那几个超过3,4K的都上传不成功。我的拦截器设置是大于这个数字的。不知道为什么上传不成功。<param name="maximumSize">409600 </param> 
    409600/1024=400K
      

  2.   

    文件的上传的流是有限制滴(是字节/符流呢,传递二进制的流呢),这点要注意;比如如果在form表单中没有添加enctype="multipart/form-data"  那么当提交表单时(上传图片),那么就容易发生错误(即添加不成功)
      

  3.   

    1.确定下action能不能执行到  看是逻辑问题还是拦截器问题2。<constant name="struts.multipart.maxSize" value="104857600" />加个这个试试
      

  4.   

    已经添加过了,不然怎么会上传成功呢,呵呵。现在的问题是同样的文件有的能成功,有的不能成功。
    <s:form action="createSpace" method="post" enctype="multipart/form-data" theme="simple">
      

  5.   

    回三楼。action是可以执行到的,因为有的图片可以上传成功的。我的问题是有的能,为什么有的不能。
    至于拦截器是框架提供的,我只是配置了一下,上面代码已经贴出。
     <constant name="struts.multipart.maxSize" value="104857600" />加个这个试试
    上面的代码是修改框架默认的大小限制,应该不是这个问题,默认的是2M,我上传的3,4K的就已经会失败了。。,
      

  6.   

    我贴一下ACTION的代码吧,其中省略了一部分表单内容和set,get方法
    private String iconFileName; private String iconContentType; private File icon; public void upload(String root) throws IOException {
    InputStream is = new FileInputStream(icon);

    File destFile = new File(root);
    if(!destFile.exists()){
    destFile.mkdirs();
    }
    OutputStream os = new FileOutputStream(destFile+"/"+ this.getIconFileName());
    byte[] buffer = new byte[400];
    int length = 0;
    while ((length = is.read(buffer)) > 0) {
    os.write(buffer, 0, length);
    }
    is.close();
    os.close();
    } @SuppressWarnings("deprecation")
    public String createSpace() throws IOException {
    HttpServletRequest request = ServletActionContext.getRequest();
    MemberInfo info = (MemberInfo) request.getSession().getAttribute(
    "member");
    MemberSpace space = info.getMemberSpace();
    if (space == null) {
    space = new MemberSpace();
    }
    space.setOpinion(this.getOpinion());
    space.setRunTime(this.getRuntime());
    space.setRunHabit(this.getRunhabit());
    space.setRunStar(this.getRunstar());
    space.setCellPhone(this.getCellPhone());
    space.setRunPlace(this.getRunplace());
    System.out.println("icon=" + icon + "iconContype=" + iconContentType
    + "|||iconFilename" + iconFileName);
    String root = "d:\\uploadIcon\\" + info.getNickName();
    System.out.println("$$$$$$$$$$$" + root + "\\" + iconFileName);
    upload(root);
    space.setIcon(root+"\\"+iconFileName);
    info.setMemberSpace(space);
    space.setMemberInfo(info);
    IMemberService memberservice = (IMemberService) BeanFactory
    .getBean("memberService");
    try {
    memberservice.modifyMemberinfo(info);
    request.setAttribute("message", "个性化空间创建成功");
    return "success";
    } catch (MemberServiceException e) {
    e.printStackTrace();
    return "input";
    }
    }
      

  7.   

    <param name="maximumSize">409600 </param> 
    去掉就可以了
      

  8.   

    七楼的办法不行,但是我把整个的拦截器去掉了之后,刚才不能上传的图片上传成功了,但是显示不出来,还有一个怪现象有一个比它大的图片能上传成功和显示成功,不理解啊。
    其中这些图片都在一个文件夹下,分别叫face1.gif,face2.gif,face3.gif都是几K的大小。