【问题标题】:Cancel FileUpload when FileSizeMax is exceeded超过 FileSizeMax 时取消 FileUpload
【发布时间】:2013-01-09 12:35:31
【问题描述】:

我有一个在 JBoss 6.1 中运行的 JSF 应用程序,它使用内部 Tomcat Servlet 容器。

我已经实现了使用 apache commons 文件上传的上传。 我想防止上传过大的文件,并在FileUploadBase 类中将属性 fileSizeMax 设置为10MB。有效,文件 对于大于 10MB。此异常会在不到一秒的时间内引发。 但主要问题是,整个文件将通过 网络。我通过检查网络流量发现了这一点。然后重定向到错误页面。

超过最大大小时如何中断文件传输 不传输整个文件?我假设该文件将是 由于 web 表单属性enctype ="multipart/form-data",在多个包中传输。

【问题讨论】:

  • 您在答案中的评论中提到您正在使用 PrimeFaces <p:fileUpload>。您应该编辑您的问题以说明您正在使用 <p:fileUpload>,而不是您正在使用 Commons FileUpload(使用 <p:fileUpload> 即已经暗示您长期以来“在幕后”使用 Commons FileUpload,请注意它是因此只是一个实现细节)。
  • PrimeFaces 只是一个不重要的细节,因为我使用的是来自浏览器的本机上传组件,没有 HTML5-JavaScript 处理。我在我的项目中使用 FileUploadFilter,如果超过最大文件大小,它使用公共文件上传类抛出异常。
  • 哦,那我想知道你为什么重新发明它而不是使用<p:fileUpload mode="simple"> 生成完全相同的 HTML 并完全透明地完成所有解析和模型更新工作?
  • 我正在使用<p:fileUpload mode="simple">,但由于 UTF-8 错误并处理超出最大文件大小的问题,我不得不将以下类添加到我的项目中。 org.primefaces.webapp.filter.FileUploadFilterorg.primefaces.webapp.MultipartRequest。 utf-8 错误链接:code.google.com/p/primefaces/issues/detail?id=3002
  • 对,UTF-8 错误。它已在 3.5 快照中修复。另见code.google.com/p/primefaces/issues/detail?id=3002stackoverflow.com/questions/11190081/…之前也报道过,至于最大尺寸,好吧,请看下面的答案。

标签: java jsf file-upload apache-commons apache-commons-fileupload


【解决方案1】:

您不能中途中止 HTTP 请求。如果您这样做了,您将无法返回 HTTP 响应,并且客户端最终将没有任何形式的反馈,可能会出现特定于浏览器的“对等连接重置”错误页面。

最好的办法是事先在 JavaScript 中验证它。顺便说一句,这只适用于browsers supporting HTML5 File API。您没有说明您正在使用哪个 JSF 文件上传组件,所以我的印象是您只是自制的,所以我将给出一个适用于呈现的 HTML <input type="file"> 的通用答案(注意它在例如 Tomahawk's <t:inputFileUpload>) 上效果很好:

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

类似这样的东西

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; // Clears the field.
    }
}

如果旧版浏览器不支持此功能,那你就迷路了。您最好的选择是 Flash 或 Applet。

【讨论】:

  • 嗨,我正在使用 PrimeFaces,是的,我正在使用简单的文件上传,这意味着使用本机浏览器上传。我知道 Html5-API 解决方案,但对于 IE,这仅适用于版本 10。
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2017-10-06
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多