【问题标题】:Get size of file requested via ajax获取通过ajax请求的文件大小
【发布时间】:2010-12-01 20:12:33
【问题描述】:

这是我希望做的:

我想向一个文件发送一个 ajax 请求(最好使用 jQuery),一旦文件被加载,确定所请求文件的大小。

经过一番谷歌搜索,很明显,我什至不知道要问的正确问题来解决这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: jquery ajax filesize


    【解决方案1】:

    您可以创建一个服务器端命令,该命令获取文件的路径和名称,打开文件以获取长度,并将大小发送回客户端。你如何做取决于你使用的服务器端语言。这是您要寻找的操作类型吗?

    【讨论】:

    • 嗯...所以,我可以使用 ajax 调用一个 php 文件,它会加载我真正想要的文件的内容,弄清楚它有多大,然后返回两个文件内容和 javascript 的大小。这样做可以让我毫无问题地调用来自另一个域的内容。这听起来绝对很棒 - 根本不是我想要的,而是一个很棒的解决方案。
    • 是的,我过去在创建授权下载控制器时使用 Java 做到了这一点。您可能还想查看 CMS 的建议——我从未想过使用 HEAD 命令,但如果您只需要文件大小,那可能会更出色。
    • 这是迄今为止唯一避免 gzip 编码导致内容长度不被发回的答案。
    【解决方案2】:

    您可以发出 HTTP HEAD 请求,并通过读取 Content-Length HTTP 标头来获取文件大小的近似值。

    这种请求用于获取请求所隐含的 URL 的元信息,而不在响应中传递它的任何内容。

    var xhr = $.ajax({
      type: "HEAD",
      url: "path/to/file.ext",
      success: function(msg){
        alert(xhr.getResponseHeader('Content-Length') + ' bytes');
      }
    });
    

    【讨论】:

    • 我同意 - 实际上我最终可能会使用其他方法来实现跨域功能,但这确实是我在询问时正在寻找的答案。
    • @jakeisonline 实际上,如果支持 gzip 编码,这是不可能的...... content-length 标头没有被发送(甚至在 HEAD 请求中),并且 W3C 禁止设置 Accept-在请求标头中进行编码,因此客户端解决方案现在似乎是不可能的。这在当前标准下根本行不通。
    • 通过 HTTPS 怎么样?
    【解决方案3】:
    var XHRObj = $.ajax({
        type:'HEAD',
        url:'/',
        success:function(data) {
            console.log( XHRObj.getResponseHeader('Content-Length') )
        }
    })
    

    你基本上是做一个 HEAD HTTP 请求并查询 Content-Length,它返回 X 个字节。

    【讨论】:

    • 如果使用 gzip 编码,则不会发送 content-length 标头
    猜你喜欢
    • 2023-04-07
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多