如果XML文件太大,我该如何中止请求?

时间:2014-02-23 16:07:36

标签: java spring spring-mvc jetty inputstream

在我的servlet中,我目前正在将XML文件设置为如下变量:

String xmlFileAsString = CharStreams.toString(new   
         InputStreamReader(request.getInputStream(), "UTF-8"));

现在在这行之后,我可以检查文件大小是否太大等,但这意味着整个文件已经流式传输并加载到内存中。

有没有办法让我获取输入流,但是这是流式传输文件,如果文件大小超过10MB,它应该中止?

1 个答案:

答案 0 :(得分:1)

您可以按顺序读取流并计算读取的字符数。首先不要使用CharStreams,因为它已经读取了整个文件。创建一个InputStreamReader对象:

InputStreamReader reader;
        reader = new InputStreamReader(request.getInputStream(), "UTF-8");

用于跟踪字数的变量:

long charCount = 0;

然后是读取文件的代码:

char[] cbuf = new char[10240]; // size of the read buffer
int charsRead = reader.read(cbuf); // read first set of chars
StringBuilder buffer = new StringBuilder(); // accumulate the data read here

while(charsRead > 0) {
    buffer.append(cbuf, 0, charsRead);
    if (charCount > LIMIT) { // define a LIMIT constant with your size limit
        throw new XMLTooLargeException(); // treat the problem with an exception
    }
}
String xmlFileAsString = buffer.toString(); //if not too large, get the string