如何知道url下载的文件是否不完整?

Cyr*_* N. 3 java corrupt download

我正在使用如何使用Java从Internet下载和保存文件这个很棒的片段从网址下载文件:

URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

但是Long.MAX_VALUE,出于安全原因,我宁愿将下载限制为2mb,因此我将其替换为

fos.getChannel().transferFrom(rbc, 0, 2097152);
Run Code Online (Sandbox Code Playgroud)

但现在,我想知道如何处理文件大小超过2mb的情况?

我该怎么做才能检查文件是否损坏?

Ale*_*lex 5

您是否考虑过根据RFC检查Content-Length标头?然后,您可以检查这是否超过某个可接受的值 - 在您的情况下为2MB - 并拒绝进一步处理.您可以通过初始HTTP HEAD请求完成此操作,然后GET如果您满意,或者通过阅读GET响应的标头并继续进行进一步流式处理(如果可接受).

或者(但可以说是丑陋的),你可以使用BufferedReader2MB的缓冲区并将其与标题进行比较.

至于腐败,你最好使用其他评论中所述的校验和.当然,这需要您事先知道资源的校验和,而不是您可能从HTTP响应本身获得的.