【问题标题】:getting file size in javascript在javascript中获取文件大小
【发布时间】:2011-02-27 07:23:15
【问题描述】:

给定一个文件的路径,例如:
C:\file.jpg
如何在 javascript 中获取文件的大小?

【问题讨论】:

  • code.google.com/p/gwtupload 检查这个东西。他们以某种方式设法显示上传进度条
  • 您有可以访问C: 的网络服务器吗?如果您的操作系统在 C: 上,我建议不要这样做,但首先要做的是。

标签: javascript


【解决方案1】:

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

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

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

【讨论】:

  • 我也这么认为,但是一些智能网络应用程序如何在上传时显示进度条?
  • @Andrey:其他 Web 应用程序使用 Java 或 Flash。我用流行的SWFUpload 的链接更新了我的答案。
  • @Andrey 其他脚本工具如 Flash、ActiveX 等可以访问本地文件系统。或者,某些服务器端技术可用于监控文件上传进度并在 javascript 请求时反馈该信息
  • 检查另一个答案的链接,滚动到页面末尾bytes.com/topic/javascript/answers/…
  • @Andrey:这也不是一个跨浏览器的解决方案。我不认为 Firefox 公开了 fileSize 属性,它当然不是标准的一部分。它也可能只适用于有效图像而不适用于其他文件。
【解决方案2】:
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);    
    }
}

【讨论】:

  • 可以补充说明吗?
  • 哦,我猜如果浏览器不支持 HTML5 方式的话,那就是问题
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    试试这个。

    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】:

      您可能会尝试使用此方法来获取以 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`
      

      【讨论】:

        【解决方案6】:

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

        但如果文件可以从远程路径访问,您也许可以使用 Javascript 发送 HEAD 请求,并读取 Content-length 标头,具体取决于网络服务器

        【讨论】:

        • 我也是这么想的,但是一些智能网络应用程序如何在上传时显示进度条?
        • @Andrey 使用 flash 或可以计算字节数或类似的 php 模块。
        • @Andrey 有用于 php 的模块,可让您查询服务器以查看上传进度。对不起,我不记得名字了。另请记住,这可能会给服务器带来压力,因为您不断查询它以查看进度。 Flash 在客户端有这个计数器
        【解决方案7】:

        你不能。

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

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

        【讨论】:

        • 这有助于您在十年后回答。当这个问题在 2010 年被问到时,我的答案以及这里接受的更详细的答案是完全正确的。 2010 年的浏览器不允许 JavaScript 读取文件大小。 2019 年的浏览器可以。让我们在 2030 年重新审视,看看是否还有其他变化。
        • 好收获!没看日期。我的错。无论如何。现在的 JavaScript 强大到我们可以自己写,也就是说,如果有限制,可能是因为你不知道如何解决它。
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          为了获得网络上页面的文件大小,我构建了一个 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查看它的实际应用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-04
            • 2015-03-31
            • 2011-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多