你可以将你上传的文件大小得到       然后和你xml中配置的大小比较一下

解决方案 »

  1.   

    dengdai gao shou lai jie da 
      

  2.   

    如上所说,然后你可以对这一动作做出反应。你可以使用return ,forword ,throw多可以
    ,指定到你想要给出提示的页面
      

  3.   

    偶都用JspSmartUpload,封装的功能很全面了
      

  4.   

    1.如何在上传文件超过设定大小时,在页面上显示错误信息(上传文件太大),struts.messages.error.file.too.large尝试了一下,发觉没有效果? 
    2.如何解决数据丢失问题?这种问题只能给个思路吧,做起来问题就多啦,我是这样想的
    1.你可以用一个filter,在这个filter里就提前读到这个要上传的文件的大小,如果>所定值,提示!
    2.数据丢失问题,如果非要用struts里的上传的话,你可以把这个文件在读入时分割成最大值,也就是我每次实体化的时候的单位就是我所认定的最大值
      

  5.   

    加分寻求专业解答。
    最好能符合struts2风格。
      

  6.   

    昏倒,
    我已经说了前提了,struts2里面设置了拦截器,我引用了paramsPrepareParamsStack,里面的upload拦截器默认2M。
    大于2M,后台比较有什么用啊,根本不进入后台?
    哎,给个正解吧,不要浪费我的感情,欺骗我的表情了。
      

  7.   

    你上传的东西在struts中会存入FormFile中 。。你可以用getFile().getFileSize()得到文件的大小  然后你在判断不就可以了    如果大于你配置文件中的大小时返回,给个提示不就可以了 
      

  8.   

    打开你的struts.properties文件,找到"struts.multipart.maxSize=",改成:"struts.multipart.maxSize=1073741824",如果没有找到,就添加这一行
      

  9.   

    16楼的,我可以取得文件大小的,在我设置最大上传为10M的时候,10M以下,我可以取得文件大小的;10M以上,check出错,他已经不进入后台了。
    17楼的,我知道如何配最大文件超过2M的CASE,但是问题是 超过10M的时候,我如何显示出错信息,如何保持画面上的数据。
      

  10.   

    问题是这样的:上传文件,需要限制上传文件的大小,这个可以在配置Action的interceptor来解决,只需设置一下maximumSize的值就可以了,我这里设置的是1048576(1M).如果我现在上传一个大小为1.5M的文件,会报文件尺寸过大的错误,这个错误的显示信息可以通过在全局的国际资源文件中配置:struts.messages.error.file.too.large.这时没有什么问题.但只时我上传一个大小为5M的文件,就会报一个the request was rejected because its size (xxxxxx) exceeds the configured maximum (xxxxxx)的错误.而且我上传页面中原有的参数全部丢失.比如我修改一条记录时传到上传页面的ID值.(这里就是我没搞明白的地方,数据为什么会丢) 
    这里是因为Struts2.0默认的上传文件的大小是2M.如果上传超过这个大小的就会报错.可以通过在struts.xml中修改默认的上传文件大小:<constant name="struts.multipart.maxSize" value="5242880" />,我在这里设置成了5M,允许上传5M的文件.如果用户上传的文件,超过了在Action中Iterceptor中的大小,而小于Struts.xml文件中设置的大小,一切正常;一旦上传的文件超过了Struts.xml文件中设置的大小,问题就出现了,虽然也能正常的返回上传页,但数据丢失......这个受不了啊哪位高人也遇到过这种问题,并且解决了,不妨告诉小弟一下,^_^,小弟这里先谢谢了....PS:暂时将Struts.xml中设置了1G,如果用户要上传再大的文件,那也没办法了,抓紧时间搞定它....唉.
      

  11.   

    我还没用struts2上传过大文件....
      

  12.   

    <!-- 上传的文件 拦截器 --> 
    <interceptor-ref name ="fileUpload" > 
    <!-- 配置允许上传的文件类型,多个用","分隔 --> 
    <param name ="allowedTypes" > 
    application/zip,application/rar,application/octet-stream,image/bmp, 
    image/png,image/gif,image/jpeg,image/GPG,image/x-png,image/pjpeg 
    </param> 
    <!-- 配置允许上传的文件大小,单位字节 --> 
    <param name="maximumSize">500000</param> 
    </interceptor-ref > 
    <interceptor-ref name ="defaultStack" /> <result name="input">uiviews/compInfoUp.jsp</result> 
    配置了以上拦截器之后,如果上传得图片和文件大小都通过,上传就没有问题,也能成功. 
    如果第一次上传得类型和大小超出限制了,就会被拦截,上传失败
      

  13.   

    具体的配置不再赘述,需要提一下的是此拦截器支持allowTypes和maximumSize属性,支持限制文件类型及文件大小。另外在捕获错误时,会设置几个字段错误,字段错误的消息可以在资源文件中配置,支持的三种错误类型的键值如下:struts.messages.error.uploading……当文件不能被上传时的错误信息。
    struts.messages.error.file.too.large……文件大小超限时的错误信息。
    struts.messages.error.content.type.not.allowed……文件类型不允许时的错误信息。
      

  14.   


    定义一个拦截器是最好的办法了吧,在拦截器中查询文件的大小,超过了自定义大小的话跳转回去,把信息set进
    request中返回页面提示还有个思路就是用js检查,对js我不是很熟悉,想想表单验证的话js应该还是有这个功能的,但是此方法有个
    缺陷,若将xml中文件大小改变的话js无法获取大小,修改的话比较麻烦
      

  15.   


    如果上传文件的大小超过了<constant name= "struts.multipart.maxSize" value="5242880" />的值,
    那么将抛出action级别的错误,要捕获消息请使用<s:actionerror />还有,你上传文件的大小都超过了<constant name= "struts.multipart.maxSize" value="5242880" />的值了,
    文件都没有上传到temp文件里,哪有什么数据丢失?(这点和拦截器里设置不同,仅拦截器设置的话,
    文件已经上传到服务器上了)不知道是不是我理解错了
      

  16.   

    另补充:<constant name= "struts.multipart.maxSize" value="5242880" />是对上传文件的最大长度进行限制
    而:interceptor是设定action能接受文件的最大长度(action处理前,文件已经上传到服务器上了)
      

  17.   

    在:struts.properties文件中把
    struts.multipart.maxSize = 9999999999
    设置成一个比较大的值,也是就说maxSize远远要大于可能上传文件的大小和fileUpload拦截器中maxinumSize的值我的 struts.properties 设置如下:struts.multipart.maxSize = 9999999999struts.multipart.saveDir = /temp要是还不对的话,找我!!!
      

  18.   

    针对问题1:
    struts.messages.error.uploading 用于提示一般的上传出错信息
    struts.messages.error.file.too.large 上传文件的大小
    struts.messages.error.content.type.not.allowed 上传文件的类型
    针对问题2:
    你可以把上传大小设置成一个比较大的值。(同上)
      

  19.   

    这个这样试试:
    1.如何在上传文件超过设定大小时,在页面上显示错误信息(上传文件太大),struts.messages.error.file.too.large尝试了一下,发觉没有效果? 
    2.如何解决数据丢失问题? 这种问题只能给个思路吧,做起来问题就多啦,我是这样想的 
    1.你可以用一个filter,在这个filter里就提前读到这个要上传的文件的大小,如果>所定值,提示! 
    2.数据丢失问题,如果非要用struts里的上传的话,你可以把这个文件在读入时分割成最大值,也就是我每次实体化的时候的单位就是我所认定的最大值.
    或者:
    org.strsuts.upfile 啥来。有代码提示的  用Formfile类来接受封装。好像大小不受限制的。
    很简单的。
    看精通struts这本书。那个电子出版社。出版的俄。里面讲的很详细的。
      

  20.   

    当你上传文件是你是在action类中写了创建了一个输入流读取对象吧当他开始读取的时候是按字节读取的所以你可以创建一个计数器就是把你读取倒的总字节数记录下来当他超过你设定的
    大小时你久返回倒提示页面
    至于你说的数据丢失那当然了,因为你读取时如果超过你限定的大小拦截器就会拦截然后抛出异常那你说它能继续读取下去吗
      

  21.   

    如果上传文件的大小超过了 <constant name= "struts.multipart.maxSize" value="xxxxxx" />的值,会抛出action级错误
    你可以在action中写验证方法来判断
    public void validateXXXX(){
    if (!getActionErrors().isEmpty()) {
    return;
    }
    }
    然后在页面上通过<s:actionerror /> 取得错误信息。
      

  22.   

    <interceptor-ref name="fileUpload"> 
                    <param name="allowedTypes"> 
                        image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg  
                    </param> 
                    <!-- 配置允许上传的文件大小  -->
                    <!-- 500K=0.5*1024*1024 byte--> 
                    <param name="maximumSize">5242880</param>
                </interceptor-ref>
                <interceptor-ref name="defaultStack"/> 
    把你配置法来看看
      

  23.   


    <constant name= "struts.multipart.maxSize" value="最大的数据" />
    除此别无它法.COMMON-UPLOAD上2M.如果这里不设置,那就是2M了.但你超过2M,就会出现你所说的结果.在配置文件里的2M要在这个参数内才有效.
      

  24.   

    敬告 LZ : 配置文件固然好,但是你也要晓得一点,有时候一些东西总得要符合一些规范,
    这其中当然就包括 文件上传的格式和大小,要不然用户什么格式都给上传
    而且吧,你想想.项目做完了,发布到互联网,公司会因为之前的配置有错而停止服务器修改完再启动吗 ???
    规范很重要...一些东西在最初就做好约定俗成,这很重要
    回到 LZ 现在的这个问题,不瞒你说,这个问题还非得用代码来处理
    如果非要使用配置,文件过大导致出错会耗费服务器的大量响应时间
    如此这般还不如直接到后台去处理,再说了,难道 使用配置 就不是后台处理了吗 ?这个问题我之前在公司做文件上传的时候就仔细想过,配置并不好
    // 上传的文件本身(页面中这样用 <input type="file" name="upload" />)
    private File upload; // 上传的文件名
    private String uploadFileName; // 上传文件类型
    private String uploadContentType;public String load(){
    // do something...  重命名上传文件名,上传文件等等...
    }// struts.xml 配置 method="load"
    public void validateLoad() {
    // 如果上传 的文件为空,则直接返回
    if ("".equals(uploadFileName) || null == uploadFileName)
    addFieldError("message", "<font color='red'>请上传文件</font>");
    else {
    if (!testpostfix(uploadFileName))
    addFieldError("message", "<font color='red'>文件类型错误</font>");
    else {
    // 文件大小,返回的是 byte
    long filesize = upload.length();
    if ((filesize / 1024 / 1024.000000000) > 10.000000000)
    addFieldError("message", "<font color='red'>文件大小不能超 10 M!</font>");
    }
    }
    }
    /**
     * 验证后缀名
     */
    public boolean testpostfix(String filename) { // 定义可上传文件的 类型
    List<String> fileTypes = new ArrayList<String>(); // 图片
    fileTypes.add("jpg");
    fileTypes.add("jpeg");
    fileTypes.add("bmp");
    fileTypes.add("gif");
    fileTypes.add("png"); // 附件
    fileTypes.add("rar");
    fileTypes.add("zip"); // 得到文件尾数 并 进行小写转换
    String postfix = filename.substring(filename.lastIndexOf(".") + 1)
    .toLowerCase();
    return fileTypes.contains(postfix) ? true : false;
    }
    // setter./getter...
    这样,如果文件过大,并不会出现服务器假死. LZ 可以自己试试有时候我倒觉得,如果不是强制性的必要,可以不用配置的我都尽量不会用,所以现在 spring hibernate 我都用注解了
      

  25.   


    这种情况下, extends="struts-default" ,不要使用 文件上传的拦截器文件格式,大小,都到后台去获取,错误信息也在后台加,前台取.有什么不好的你有没有想过.你对 struts 2 这个配置真的有这么依赖吗?看了下,都过去一年了. LZ 怎么就没自己想想 ?也许 struts 2  的有一些东西并不能全部解决我们的需求 ?自己动动脑,想想办法嘛. 就只会 google . baidu解决不了的,我们也可以自主一点啊...
      

  26.   

    action中接受消息的时候先进行判断!
    long fileSize = uploadFile.length();
    if (fileSize >= 2048000) {
        ....
    }
      

  27.   

    另外在struts中把大小参数设置足够大,最好在action中判断文件大小,不要通过拦截器为好!
      

  28.   

    我给楼主以及大家一个正解首先在struts.xml文件中设定,设置大小为1G
    <constant name= "struts.multipart.maxSize" value="1073741824" />在struts.xml文件的<action></action>中,以参数的形式你想控制的大小,以及类型<param name="allowedSize">2048000</param>
    <param name="allowedTypes">
    image/png,image/gif,image/jpeg,text/plain,application/msword,application/excel,application/x-rar-compressed,application/x-zip-compressed,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    </param>
    这么配置后,只要用户上传的文件不超过1G,就可以跳进action里面,然后通过后台的java代码来限制上传文件大小以及类型,并且可以定一个String变量存反馈信息,例如if (this.rewardfile.length() > this.allowedSize) {
        this.setUploadFailedInfo("上传文件失败,上传文件大小超过2M");
        return "uploadSizeFailed";
    }
    if (!this.allowedTypes.contains(this.rewardfileContentType)) {
        this.setUploadFailedInfo("上传文件失败,上传文件类型不符合要求");
        return "uploadTypeFailed";
    }
      

  29.   

    看看这个:http://www.javaeye.com/topic/287800
    摘要:【
    当上传失败时,能够将其他输入内容显示出来,但是这样做的结果是全部的文件肯定会上传到服务器上,也就是说,虽然是页面上报了文件因为太大,请求被拒绝的错,但是文件依然会被上传到服务器上,commons-fileupload组件根本没会去拦文件的上传。如果出现了这个异常,我们根本无法让原来输入的内容还显示出来的,因为commons-fileupload组件并没有解析全部的输入内容,直接给出异常了,到了params拦截器中,request里就是空的,根本取不到parameter,所以也就无法注入到Action中了。这种情况下,只能显示一个告知用户由于提交数据量过大,服务器拒绝了请求的错误信息,比较好的方法是,直接跳到一个专门的页面,提示用户,然后让用户点返回来再次输入,否则用户会感觉上传文件大就大吧,怎么连我输入的其他一些内容也没给保存住。当然,如果能用Ajax来上传文件,对客户的操作体验可能是最好的,但是,这样可能会导致服务器上有些挂空的文件(上传后从来没被用过),需要想法清除的。】