HTML 上传MAX_FILE_SIZE似乎不起作用

2022-08-30 11:48:18

我想知道名为隐藏的字段应该如何工作?MAX_FILE_SIZE

<form action="" method="post" enctype="multipart/form-data">
    <!-- in byes must preceed file field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> 
    <input type="file" name="upload" />

    <input type="submit" name="submit" value="Submit" />
</form>

我上传了一个4MB以上的文件,但我没有得到客户端的警告(我不是在谈论服务器端)。它应该做什么?MAX_FILE_SIZE

更新

好吧,所以PHP施加了一个“软”限制。但是使用它和检查代码中的东西有什么区别吗?$_FILES['upload']['size'] < 2000


答案 1

MAX_FILE_SIZEKB 而不是字节为单位。你是对的,它是以字节为单位的。因此,对于4MB的限制,请尝试:convert 4MB in bytes {1024 * (1024 * 4)}

<input type="hidden" name="MAX_FILE_SIZE" value="4194304" /> 

enter image description here

更新 1

正如其他人所解释的那样,你永远不会得到警告。它只是为了对服务器端施加软限制。

更新 2

回答您的子问题。是的,有区别,你永远不要相信用户输入。如果要始终施加限制,则必须始终检查其大小。不要相信什么,因为它可以由用户更改。所以,是的,你应该检查以确保它总是达到或超过你想要的大小。MAX_FILE_SIZE

不同之处在于,如果您施加了2MB的a,并且用户尝试上传4MB的文件,一旦他们达到大约上传的前2MB,传输将终止,PHP将停止接受该文件的更多数据。它将报告文件数组上的错误。MAX_FILE_SIZE


答案 2

在我开始之前,请让我强调,必须在服务器端检查文件的大小。如果未在服务器端进行检查,恶意用户可以覆盖您的客户端限制,并将大型文件上传到您的服务器。不要信任用户。

我玩了一下PHP的MAX_FILE_SIZE,它似乎只在文件上传后才起作用,这使得它变得无关紧要(再次,恶意用户可以很容易地覆盖它)。

下面的javascript代码(在Firefox和Chrome中测试过)基于Matthew的帖子,将警告用户(好的,无辜的)先验地上传一个大文件,从而节省流量和用户的时间:

<form method="post" enctype="multipart/form-data" 
onsubmit="return checkSize(2097152)">    
<input type="file" id="upload" />
<input type="submit" />

<script type="text/javascript">
function checkSize(max_img_size)
{
    var input = document.getElementById("upload");
    // check for browser support (may need to be modified)
    if(input.files && input.files.length == 1)
    {           
        if (input.files[0].size > max_img_size) 
        {
            alert("The file must be less than " + (max_img_size/1024/1024) + "MB");
            return false;
        }
    }

    return true;
}
</script>

推荐