0

我有一个简单的 PHP 表单,可以通过电子邮件发送一些文本数据和单个文件附件。我相信,只要上传不打破服务器的任何限制,例如大小或执行时间,一切都运行良好。当文件突破这些限制时,浏览器会显示上传 0% - 100% 就好了,但不是提交表单,而是刷新页面,没有发送 POST 数据。

我没有增加任何限制的选项。我正在开发一个项目,我无法通过 php.ini、.htaccess 或 ini_set() 增加上传大小或执行时间的限制。这很好,我可以接受这个特定客户的托管公司给我的限制。

但是,当用户尝试上传超出限制的大文件时,我只需要一种用户友好的方式来提交表单,而不是完全停止执行并且页面刷新没有 POST 数据。在这一点上,我什至无法在提交时向用户显示任何错误,例如“文件必须小于 10MB”,因为当文件太大时表单实际上不会被发布。

如果需要任何澄清,请告诉我。

4

1 回答 1

1

显然,如果您的脚本用于将文件作为电子邮件附件发送,那么您的文件确实应该小于 10 个月,因为许多邮件服务器会拒绝较大的电子邮件。

出于安全原因,您无法从浏览器访问有关文件的信息。但是一旦在表单的文件字段中选择了文件,您就可以使用 HTML5 文件 API。有关完整的演示文稿,请参阅此页面

这是您在提交之前需要处理文件大小的代码部分:

<input type="file" id="a_file" name="a_file" />
<script>
  function fileSelect(evt) {
    var file = evt.target.files[0];
    var size_mo = (file.size / (1024 * 1024)).toFixed(3);

    if (size_mo >= 10)
    {
        alert('Your file is too big ('+size_mo+'Mo).');
        // eventually reset the form with window.your_form.reset() to avoid submit
    }
    else
    {
        alert('Your file is ready for upload ('+size_mo+'Mo)');
    }
  }
document.getElementById('a_file').addEventListener('change', fileSelect, false);
</script>

但是,此解决方案将仅支持最新的浏览器,并且与低于 10 的 Internet Explorer 版本不兼容。

没有其他使用 HTML 或 JS 的解决方案。如果您想获得全面支持,您将需要 Flash 或 Java(请记住,还有一些计算机未安装这些技术)。因此,您可以做的最好的事情是使用带有浏览器检测的 HTML5 代码,并且如果您无法读取文件大小并在支持 HTML5 时具有良好的行为,请不要警告用户。

于 2013-04-22T21:02:48.233 回答