如何在客户端使用 HTML 和 Javascript 验证文件大小

IT技术 javascript html
2021-02-24 03:04:50

如何使用 JavaScript 在客户端验证文件大小?type=file用于选择文件

3个回答

更新 2013 作为此编辑,所有主要浏览器都支持 File API,并且在版本 10 中支持 IE

http://caniuse.com/#search=file%20api

如果您仍然需要支持 IE9 及以下版本,您可能仍然希望使用 SWFUpload,但此时它可能更像是一种后备,因为 html5 文件 api 支持 SWFUpload 无法到达的移动平台。html5 文件 api 基于 firefox 的文件 api,如下所述。

另请参阅此重复问题 Client Checking file size using HTML5?

更新: Firefox 已将其 API 更改为此https://developer.mozilla.org/en/DOM/FileReader

你可以像这样在火狐中做到这一点

html:

<form action="" method="get" accept-charset="utf-8">
<input type="file" name="file" value="" id="file">
<p><input type="submit" value="Continue &rarr;"></p>
</form>

javascript:

var filesize = document.forms[0].file.files[0].fileSize

如果有办法在 IE 中做到这一点,我不知道。它可能涉及 activeX 或其他一些此类垃圾。

编辑:我在这里找到了这个,如何在 IE 中做到这一点

<head>
<script>
function getSize()
{
 var myFSO = new ActiveXObject("Scripting.FileSystemObject");
 var filepath = document.upload.file.value;
 var thefile = myFSO.getFile(filepath);
 var size = thefile.size;
 alert(size + " bytes");
}
</script>
</head>
<body>
<form name="upload">
<input type="file" name="file">
<input type="button" value="Size?" onClick="getSize();">
</form>
</body>
</html>
Javascript 不能替代检查服务器上的文件大小。如果目标只是为了节省一些资源,那么我认为这个目标是可能的。
2021-04-22 03:04:50
我不知道浏览器会暴露这种信息。有趣的。
2021-04-29 03:04:50
我完全同意布列塔尼,如果你真的想确定,你应该总是检查文件服务器端。例如,这可能包括检查上传图像的尺寸,或防止上传(或至少保存)动画 gif。在处理像 Javascript 这样的客户端代码时,客户端永远无法 100% 信任。
2021-05-01 03:04:50
+1 虽然这是一个很好的方法(使用原始问题所涉及的 Javascript),但您实际上只是为两个浏览器制定了解决方案。当然,这是两个最流行的浏览器,但如果您需要多个浏览器/平台支持,则可能很难实现。
2021-05-05 03:04:50
这个答案需要很多注意事项才能在一般情况下有用。1) IE 需要将站点插入到“受信任的站点”列表中,以免出错。如果您要从其他页面复制/粘贴内容,请先做一些研究 2) 这仅在 FF3 3 中引入)并且fileSize已被弃用(developer.mozilla.org/en/DOM/File
2021-05-19 03:04:50

也许您可以改用SWFUpload,它是一个小型 Flash 应用程序,可为您处理上传的客户端。从他们的功能列表中:

  • 通过在对话框中按 ctrl/shift-selecting 一次上传多个文件
  • 所有事件的 Javascript 回调
  • 上传开始前获取文件信息
  • 使用 XHTML 和 css 样式上传元素
  • 使用 HTML 上传文件时显示信息
  • 无需重新加载页面
  • 适用于所有支持 Flash 的平台/浏览器。
  • 如果 Flash 或 javascript 不可用,则优雅地降级为正常的 HTML 上传表单
  • 上传开始前控制文件大小
  • 只在对话框中显示选择的文件类型
  • 队列上传,在开始上传之前删除/添加文件

我想结合使用 javascript 在客户端检查文件大小的两种不同方法。我已经在 FF/IE/Chrome 上测试过它,它工作正常:

 <script type="text/javascript">
    function checkBrowser()
    {
         if(navigator.appName == "WebTV")
        {
         alert("You're using the WebTV browser.")
        }
         if(navigator.appName == "Netscape")
        {
         checkFileSizeFF();
        }
         if(navigator.appName == "Microsoft Internet Explorer")
        {
         checkFileSizeIE();
        }
    }
    function checkFileSizeFF()
    {
        var filesize = document.forms[0].file.files[0].fileSize;
        alert(filesize/(1024*1024)  + " MB");
    }
    function checkFileSizeIE()
    {
     var myFSO = new ActiveXObject("Scripting.FileSystemObject");
     var filepath = document.upload.file.value;
     var thefile = myFSO.getFile(filepath);
     var size = thefile.size/(1024*1024);
     alert(size + "MB");
    }
    </script>

    <form action="" method="get" accept-charset="utf-8" name="upload">
    <input type="file" name="file" value="" id="file">
    <p><input type="submit" value="Continue &rarr;" onclick="checkBrowser()"></p>
    </form>


    <div id="example"></div>