0

我遇到了一个非常有趣的问题。我们已经从 Apache 切换到 Nginx,并且我们有一个文件上传功能,这在 Nginx 中出现了问题。如果要上传的文件太大,则会显示错误消息:

413请求实体太大

nginx/1.4.6 (Ubuntu)

这是因为我们对文件大小有限制,我们不接受服务器上大于 2 MB 的文件。但是,这不是一个用户友好的错误,因此我们希望隐藏技术细节并以用户友好的方式通知用户。我已经实现了一个适用于任何浏览器的功能,除了 Opera Mini。我会从中取出一些细节,因为它们与问题无关:

if (isOperaMini()) {
    $("#opera-mini-photo-form").submit(function(e) {
        if (document.getElementById("opera-input").files[0].size >= 1048576) {
            e.preventDefault();
            alert"Invalid or too large file");
        }
    });
} else {
    //some code for other browsers
}

如果浏览器是 Opera Mini,那么submit事件里面的 if 会一直存在false,并且form会一直提交。我检查了在其他浏览器中为 Opera Mini 编写的代码,看看是否有错误实现。在其他浏览器中它工作。我试图在 Opera Mini 中提醒以下值:

document.getElementById("opera-input").files[0].size

alert没有发生。现在,如果我们考虑到 Opera Mini 使用 Opera 代理来浏览网页这一事实,我想知道 Javascript 是否真的在代理服务器上运行。如果是这种情况,它将解释为什么我无法检查文件大小。如果没有,那么我不知道是什么导致了这个问题。我应该用什么代替

document.getElementById("opera-input").files[0].size

检查文件的大小?

4

1 回答 1

1

document.getElementById("opera-input").files是一个文件 API。

Opera Mini中未启用文件 API 。

检查简单fiddle

所以最好检查服务器上的文件大小并将有关文件大小的错误添加到您的响应 html 中。

于 2015-01-23T08:52:46.520 回答