大文件(2GB以上)上传的坑

文件上传大小配置为

1024*1024*1024*5=5,368,709,120(5GB)

但int最大为

2,147,483,648(2GB)

于是,把文件大小限制为

1GB或Integer.MAX_VALUE

然而,问题也没解决。

大于Interger.MAX_VALUE的文件可以正常上传,大于1GB小于Interger.MAX_VALUE的会失败。

于是顺着代码跟到这

image.png

@Override
public int getContentLength() {
    long length = getContentLengthLong();
    if(length > Integer.MAX_VALUE) {
        return -1;
    }
    return (int)length;
}

可以看到,如果文件长度大于Int的最大值,就返回-1,我上传的文件大于这个值的所以就返回了-1。是不是一开始使用的是int,然后突然发现是坑,所以将计就计了,强转成int?

image.png

image.png

评论区

JFinal

2019-10-18 14:56

应该算是 undertow-servlet 的 bug