1.我在webwork.properties中限制了文件上传的大小,那如何在程序中去控制文件的大小,也就是当文件上传的大小超过限制以后如何去返回给前台一个出错信息,而不是直接抛出异常?重载fileUpload?还是什么其它方法?
2.上传超过限制大小时,FileUploadInterceptor拦截器 不报错,而返回到自己写的action中时 相关file的属性都为空。包空指针错误。怎么才能把超过大小的错误在前台页面显示呢?

解决方案 »

  1.   

    实现ServletRequestAware或者SessionAware接口,
    在拦截器中把信息写到request或者session的MAP中,
    然后在JSP页面中用表达式requestScope.XXXX或者
    sessionScope.XXXX取出来就行了。
      

  2.   

    还有其他方法?jsp页面能获取用户选中文件大小就好了  呵呵
      

  3.   

    为什么出现错误 在action中获取 getFileError getFileErrorMaping ;getErrorMesg...都是空了,,搞不懂  急求答案,在线等
      

  4.   

    //取得文件
                com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
    //取得文件名
                String fileName = myFile.getFileName();
    //取得文件大小
                    int fileSize = myFile.getSize(); 
      

  5.   

    可以扑捉异常,然后在request中储存"上传文件过大",在前台弹个框好啦
      

  6.   

    <s:file name="upfile" value="图片上传" />
    <s:fielderror fieldName="upfile" />  //在此处显示错误信息
    在action.properties文件中写struts.messages.error.file.too.large=\u4E0A\u4F20\u7684\u6587\u4EF6\u592A\u5927    即页面提示“上传文件太大”
      

  7.   

    我设了60M
      
    webwork.properties里
    webwork.multipart.maxSize = 62914560xwork.xml里也设了
                <interceptor-stack name="fileUpload-validation-stack">
                    <interceptor-ref name="fileUpload">
             <param name="maximumSize">62914560</param>
                    </interceptor-ref>
     才50M文件为什么  public String intercept(ActionInvocation invocation) throws Exception {
            ActionContext ac = invocation.getInvocationContext();
            HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);        if (!(request instanceof MultiPartRequestWrapper)) {
                if (log.isDebugEnabled()) {
                    ActionProxy proxy = invocation.getProxy();
                    log.debug(getTextMessage("webwork.messages.bypass.request", new Object[]{proxy.getNamespace(), proxy.getActionName()}, ActionContext.getContext().getLocale()));
                }            return invocation.invoke();
            }        final Object action = invocation.getAction();
            ValidationAware validation = null;        if (action instanceof ValidationAware) {
                validation = (ValidationAware) action;
            }        MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;        if (multiWrapper.hasErrors()) {
                for (Iterator errorIter = multiWrapper.getErrors().iterator(); errorIter.hasNext();) {
                    String error = (String) errorIter.next();                if (validation != null) {
                        validation.addActionError(error);
                    }                log.error(error);
                }
            }        Map parameters = ac.getParameters();        // Bind allowed Files
            Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
            while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
                // get the value of this input tag
                String inputName = (String) fileParameterNames.nextElement();            // get the content type
                String[] contentType = multiWrapper.getContentTypes(inputName);            if (isNonEmpty(contentType)) {
                    // get the name of the file from the input tag
                    String[] fileName = multiWrapper.getFileNames(inputName);                if (isNonEmpty(fileName)) {
                        // Get a File object for the uploaded File
                        File[] files = multiWrapper.getFiles(inputName);
                        if (files != null) {
                            for (int index = 0; index < files.length; index++) {
                                getTextMessage("webwork.messages.current.file", new Object[]{inputName, contentType[index], fileName[index], files[index]}, ActionContext.getContext().getLocale());                            if ( acceptFile(files[index], contentType[index], inputName, validation, ac.getLocale())) {
                                    parameters.put(inputName, files);
                                    parameters.put(inputName + "ContentType", contentType);
                                    parameters.put(inputName + "FileName", fileName);
                                }
                            }
                        }
                    } else {
                        log.error(getTextMessage("webwork.messages.invalid.file", new Object[]{inputName}, ActionContext.getContext().getLocale()));
                    }
                } else {
                    log.error(getTextMessage("webwork.messages.invalid.content.type", new Object[]{inputName}, ActionContext.getContext().getLocale()));
                }
            }        // invoke action
            String result = invocation.invoke();        // cleanup
            fileParameterNames = multiWrapper.getFileParameterNames();
            while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
                String inputValue = (String) fileParameterNames.nextElement();
                File[] file = multiWrapper.getFiles(inputValue);
                for (int index = 0; index < file.length; index++) {
                    File currentFile = file[index];
                    log.info(getTextMessage("webwork.messages.removing.file", new Object[]{inputValue, currentFile}, ActionContext.getContext().getLocale()));                if ((currentFile != null) && currentFile.isFile()) {
                        currentFile.delete();
                    }
                }
            }        return result;
        }
    在我重写的拦截器中  while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
    这一句就走不下去了(request里的参数都变成null的原因)
      

  8.   

    呵呵   遇到同样问题明明没超过最大限制 还是在拦截器的while (fileParameterNames != null && fileParameterNames.hasMoreElements())这一句为false。
    为什么呢,,难道xwork上传本身就有限制? 同求答案 谢谢
      

  9.   

    请问楼主如何解决fileParameterNames.hasMoreElements()返回false的问题?
    可否将解决方案发到