gpt4 book ai didi

java - 在 Apache FileUpload Streaming API 中读取所有文件之前确定文件上传的大小

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:43 25 4
gpt4 key购买 nike

有两种方法可以使用 Apache FileUpload 库。

文件上传

http://commons.apache.org/fileupload/using.html

和流式文件上传 API

http://commons.apache.org/fileupload/streaming.html

除了流式 API 似乎没有办法在处理流之前检查文件大小外,它们都工作得很好。

这是因为 Streaming API 根本不知道文件大小,还是因为我需要手动读取一些 header 或其他内容来获取分段上传大小?

最佳答案

如果不使用整个 HTTP 请求正文,就无法知道多部分请求的一部分的大小。一旦开始消费 HTTP 请求体,就不能中途停止消费。它必须消耗到最后一个字节才能返回响应。这正是 HTTP 和 TCP/IP 的本质。为了保持低服务器内存使用率,您可以在读取的字节超过大小时丢弃它们(即在读取循环中检查它并且不要将它们分配给任何变量)。

最好的办法是在上传之前用 JavaScript 验证文件长度。这在浏览器中受支持 supporting HTML5 File应用程序接口(interface)。当前版本的 Firefox、Chrome、Safari、Opera 和 Android 都支持它。 IE9暂不支持,IE10以后会支持。

<input type="file" ... onchange="checkFileSize(this)" />

checkFileSize() 看起来像这样

function checkFileSize(inputFile) {
var max = 10 * 1024 * 1024; // 10MB

if (inputFile.files && inputFile.files[0].size > max) {
alert("File too large."); // Do your thing to handle the error.
inputFile.value = null; // Clear the field.
}
}

关于java - 在 Apache FileUpload Streaming API 中读取所有文件之前确定文件上传的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10539669/

25 4 0