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

如何在客户端使用HTML和Javascript验证文件大小,javascript,html,Javascript,Html,如何使用JavaScript在客户端验证文件大小?我正在使用type=file选择文件更新2013 在本次编辑中,文件API在所有主要浏览器中都受支持,并且从版本10开始在IE中受支持 如果您仍然需要支持IE9及以下版本,您可能仍然希望使用SWFUpload,尽管在这一点上,它可能更像是一种退路,因为html5文件api在SWFUpload无法到达的移动平台上提供支持。html5文件api基于firefox的文件api,如下所述 另见此重复问题 更新:Firefox已将其API更改为 你可以

如何使用JavaScript在客户端验证文件大小?我正在使用
type=file
选择文件更新2013 在本次编辑中,文件API在所有主要浏览器中都受支持,并且从版本10开始在IE中受支持

如果您仍然需要支持IE9及以下版本,您可能仍然希望使用SWFUpload,尽管在这一点上,它可能更像是一种退路,因为html5文件api在SWFUpload无法到达的移动平台上提供支持。html5文件api基于firefox的文件api,如下所述

另见此重复问题

更新:Firefox已将其API更改为

你可以在firefox中这样做

html:

如果在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>

函数getSize()
{
var myFSO=新的ActiveXObject(“Scripting.FileSystemObject”);
var filepath=document.upload.file.value;
var thefile=myFSO.getFile(文件路径);
变量大小=文件大小;
警报(大小+字节);
}
也许您可以改用它,它是一个小型闪存应用程序,为您处理上传的客户端。从其功能列表中:

  • 通过在对话框中按住ctrl/shift键同时上载多个文件
  • 所有事件的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>

函数checkBrowser()
{
如果(navigator.appName==“WebTV”)
{
警报(“您正在使用WebTV浏览器。”)
}
如果(navigator.appName==“Netscape”)
{
checkFileSizeFF();
}
如果(navigator.appName==“Microsoft Internet Explorer”)
{
checkFileSizeIE();
}
}
函数checkFileSizeFF()
{
var filesize=document.forms[0]。file.files[0]。filesize;
警报(文件大小/(1024*1024)+“MB”);
}
函数checkFileSizeIE()
{
var myFSO=新的ActiveXObject(“Scripting.FileSystemObject”);
var filepath=document.upload.file.value;
var thefile=myFSO.getFile(文件路径);
变量大小=文件大小/(1024*1024);
警报(大小+“MB”);
}


+1虽然这是一种很好的方法(使用最初的问题所涉及的Javascript),但您实际上只是在为两种浏览器创建一个解决方案。当然,这是两种最流行的浏览器,但如果您需要多个浏览器/平台支持,则可能很难实现。Javascript不能替代检查服务器上的文件大小。如果目标只是为了节省一些资源,那么我认为这个目标是可能的。我完全同意布雷顿的观点,如果你真的想确定的话,你应该经常检查文件服务器端。例如,这可能包括检查上传图像的尺寸,或防止上传(或至少保存)动画GIF。当处理客户端代码(如Javascript)时,客户端永远不会100%可信。我不知道浏览器会公开此类信息。有趣。这个答案需要很多注意事项才能在总体上有用。1) IE需要将站点插入到“受信任站点”列表中,以避免出错。如果你想复制/粘贴其他页面的内容,先做一些研究2)这只是在FF3中介绍的3)而且
fileSize
已经被弃用()
<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>
 <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>