最近在做一个项目遇到一个问题,每个用户都会上传一个压缩文件,并且给每个用户分配的目录大小只有2G,所以问题是要先知道用户上传的压缩文件大小,解压后是不是超过了2G,超过就不允许上传,在网上搜索了下,也没找到合适的方法,看了一个别人给的案例是使用java自带的java.util.zip实现的,但是校验bz2这种类型的压缩文件大小时候,总是报错: |
|
取压缩文件大小不就好了不需要解压保存吧
|
|
20分 |
上传的文件先放到临时目录,解压后不超过2G才认为OK,否则直接删除。
|
在页面上明确提示【每个用户分配的目录大小只有2G】
在服务器端,用操作系统级别的权限,每个用户分配的目录大小设置为2G以内 |
|
给了2G的空间 只要人家没超过2G就可以吧 难道服务器还要把每个压缩文件都解压保存吗
|
|
为什么要帮别人解压?要么直接上传一个未压缩,要么上传一个压缩,我帮你保存着不就完了?
|
|
现在是架构师是这么设计的,要求必须先校验压缩文件是否超过了2G,然后才能去解压,
把文件先解压在判断解压后的大小,这个我觉得不是最优的方案,但是做个备选方案,其他兄弟有解决思路吗? 压缩文件里面应该有什么标志位,表示解压后文件是多大的吧 |
|
50分 |
首先,这种方式不是很好,要是人家zip加密了怎么办,zip本身是不代解压后的信息的(包括文件名和大小) 其次,看你的异常,你把jdk版本发来,有些jdk并不能很好的支持zip,再有把你的代码贴出来,看看你的用法是不是有问题。 |
另外,你用的什么中间件,印象中zip的工具再中间件里的某些包也有,出现冲突以后也会报异常(包括版本) |
|
30分 |
小哥,人家那是bz2,跟zip揍是两个格式,java.util.zip根本不支持。java2s.com上的代码只能打开zip文件。楼主这个问题,只能去试试Apache Commons Compress: http://commons.apache.org/proper/commons-compress/
或者干脆限制bz2上传!
|
多谢各位,找到了一种解决方法,就是边解压边判断文件大小,超过了2G就不在继续解压,同时删除已经解压出来的文件,网上找的一段代码,测试了支持bz2格式的
|