解决方案 »

  1.   

    我不是前台获取  我是servlet后台获取大小 我现在是获取到了文件的大小 但不能中断文件的上传
      

  2.   

    我不是前台获取  我是servlet后台获取大小 我现在是获取到了文件的大小 但不能中断文件的上传
    就写个过滤器,在后台判断一下文件大小,超出范围过滤掉并给提示就行了。
      

  3.   

    主要是客户端 也就是浏览器获取不到要上传的文件的大小 所以我想做集成上传和控制大小一体的servlet上传功能
      

  4.   

    我不是前台获取  我是servlet后台获取大小 我现在是获取到了文件的大小 但不能中断文件的上传
    就写个过滤器,在后台判断一下文件大小,超出范围过滤掉并给提示就行了。
    虽然我没试写过滤器 但我认为过滤器也是不能解决的 因为当我们点击提交时 浏览器就开始向服务器不断的提交数据 当进入我们自己的方法时 这个操作仍然是在进行的 而我的问题是  如何中断浏览器向服务器继续提交数据这个操作
      

  5.   


    那如果你将上传文件的最大值存到用户的session中呢? 当用户点击上传后,通过js之类的获取到文件大小,与session中的限制值进行对比,不超过的话再进行后续的动作?
    不知道这样可行不,要考虑到不同浏览器获取文件大小的兼容性问题
      

  6.   

    我不是前台获取  我是servlet后台获取大小 我现在是获取到了文件的大小 但不能中断文件的上传
    就写个过滤器,在后台判断一下文件大小,超出范围过滤掉并给提示就行了。
    虽然我没试写过滤器 但我认为过滤器也是不能解决的 因为当我们点击提交时 浏览器就开始向服务器不断的提交数据 当进入我们自己的方法时 这个操作仍然是在进行的 而我的问题是  如何中断浏览器向服务器继续提交数据这个操作
    不会啊,你上传的代码肯定在你的方法里,过滤器在你调用方法之前就可以判断你传过来的File对象的属性值了,你要从request里取出来,不合适直接就过滤掉了,不会执行方法啊,你操作IO的代码是在方法里么。
      

  7.   

    不知道楼主是怎样实现的,POST只是做把表单提交到后台这个动作而已,至于表单数据到了后台之后怎么处理,就是看程序怎么实现了。文件上传要用到IO吧,如果你在IO之前判断文件是否过大,过大的话直接return回去,那就不存在说文件正在上传了。“ 所以我想做集成上传和控制大小一体的servlet上传功能” 我觉得这个思路就有矛盾的,楼主可以用AJAX,选中文件后到后台去判断文件大小,然后返回是否符合要求。那样就等于是在浏览器端判断了。
      

  8.   

    回复 8楼 9楼 我大致说明一下文件上传的一个流程(不一定正确 仅供参考) 当我们提交的表单中含有enctype="multipart/form-data" 这个属性时  那么浏览器自动将表单数据和文件转成二进制数据 并提交的服务器 而我们做的仅仅是解析二进制流
    这里假设有10M的文件 完全上传到服务需要1分钟
    当我们提交时 可能前5秒钟就进入了我们的servlet方法 我们这个时候已经可以取得上传内容的大小(可能是建立连接时一些包头信息),但此时二进制内容仍然还在不断的向服务器传输 甚至知道我们走完所有的自己的方法 这个传输还没结束,而我们的response输出是要等到 传输进来的内容全部结束后才会进行,所以在此期间所有对response的操作都将暂停直到传输结束
    而我的问题就在于 如果当我获取到文件大小超过限制时  中断浏览器向服务器提交数据 因为此时我已经不需要这些上传的内容了
      

  9.   

    过滤器直接拦截的是请求,你提交表单访问某个servlet的时候发出的请求就先会被拦截(如果配置了过滤器),然后你可以根据需求,如果拦截就不会进doPost方法明白吗?像你说的一提交就无法控制了还得了?好好补一补基础吧。
      

  10.   

    不好意思我确实理解有问题,整天用框架没关注过这些底层知识,问了一下我们技术总监,浏览器会把整个表单数据转成协议标准数据发送给服务器,所以说这个的确是无法控制的,只有在服务器接受到这个请求中的contentlength以后才能做出控制。不过引入html5之后是可以很方便的控制的!
      

  11.   

    12楼能给个无兼容问题的 判断文件大小的控件或方法吗  这个我也早就百度过了  目前知道query+flash可以 其他就不知道了
    IE安全级别设的好搞 js获取不到文件大小
      

  12.   

    不好意思我确实理解有问题,整天用框架没关注过这些底层知识,问了一下我们技术总监,浏览器会把整个表单数据转成协议标准数据发送给服务器,所以说这个的确是无法控制的,只有在服务器接受到这个请求中的contentlength以后才能做出控制。不过引入html5之后是可以很方便的控制的!
    “过引入html5之后是可以很方便的控制的” 怎么控制 这是我急需的