在javascript中获取文件大小

时间:2010-06-03 12:52:49

标签: javascript

给出如下文件的路径:
C:\ file.jpg
如何在javascript中获取文件的大小?

9 个答案:

答案 0 :(得分:35)

如果它不是由具有完全访问权限的JavaScript驱动的本地应用程序,则无法仅从路径名称获取任何文件的大小。出于安全原因,运行javascript的网页无权访问本地文件系统。

如果要显示进度条,可以使用优雅降级文件上传器,如SWFUpload。 HTML5也有File API,但目前还没有广泛支持。如果用户选择input[type=file]元素的文件,您可以从files集合中获取有关该文件的详细信息:

alert(myInp.files[0].size);

答案 1 :(得分:11)

function findSize() {
    var fileInput =  document.getElementById("fUpload");
    try{
        alert(fileInput.files[0].size); // Size returned in bytes.
    }catch(e){
        var objFSO = new ActiveXObject("Scripting.FileSystemObject");
        var e = objFSO.getFile( fileInput.value);
        var fileSize = e.size;
        alert(fileSize);    
    }
}

答案 2 :(得分:3)

如果您可以使用javascript访问用户的文件系统,请查看可能发生的错误。

但是,您可以使用文件系统对象,但这仅适用于IE:

http://bytes.com/topic/javascript/answers/460516-check-file-size-javascript

答案 3 :(得分:1)

你不能。

出于安全原因,JavaScript无法访问本地计算机上的文件,甚至无法检查其大小。

您唯一能做的就是使用JavaScript将带有file字段的表单提交到服务器端脚本,然后可以测量其大小并将其返回。

答案 4 :(得分:1)

试试这个。

function showFileSize() {
  let file = document.getElementById("file").files[0];
  if(file) {
    alert(file.size + " in bytes"); 
  } else { 
    alert("select a file... duh"); 
  }
}
<input type="file" id="file"/>
<button onclick="showFileSize()">show file size</button>

答案 5 :(得分:0)

使用网络浏览器以标准方式无法使用javascript获取本地文件的文件大小。

但是如果可以从远程路径访问该文件,您可以使用Javascript发送HEAD请求,并根据Web服务器读取Content-length标头

答案 6 :(得分:0)

你不能因为Javascript中没有文件输入/输出。有关发布的类似问题,请参阅here

答案 7 :(得分:0)

为了获取网页上的页面文件大小,我构建了一个javascript书签来完成这项工作。它以kb为单位提醒大小。如果要复制文件大小,请将警报更改为提示。

这是警报的书签代码。

<a href="javascript:a=document.getElementsByTagName('HTML')[0].outerHTML;b=a.length/1024;c=Math.round(b);alert(c+' kb');">Doc Size</a>

这是提示的小书签代码。

<a href="javascript:a=document.getElementsByTagName('HTML')[0].outerHTML;b=a.length/1024;c=Math.round(b);prompt('Page Size',c+' kb');">Doc Size</a>

http://bookmarklets.to.g0.to/filesize.php

中查看此操作

答案 8 :(得分:0)

您可能会尝试此操作以kB和MB为单位获取文件大小 直到文件大小(以字节为单位)最多为7位,结果将为kbs。 7似乎是神奇的数字。 此后,如果字节有7到10位数字,则必须将其除以10 ** 3(n),其中n是附加操作。 每增加3位数字,该模式就会重复一次。

let fileSize = myInp.files[0].size.toString();

if(fileSize.length < 7) return `${Math.round(+fileSize/1024).toFixed(2)}kb`
    return `${(Math.round(+fileSize/1024)/1000).toFixed(2)}MB`