通过Ajax请求获取文件大小

13

以下是我希望实现的内容:

我希望发送一个ajax请求到一个文件中(最好使用jQuery),一旦文件被加载,就能够确定所请求的文件大小。

经过一番搜索,很明显我甚至不知道该问什么问题来解决这个问题,非常感谢任何帮助。

3个回答

41
你可以发起一个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');
  }
});

我同意 - 实际上,为了跨域功能,我可能最终会使用另一种方法,但当我提问时,这确实是我在寻找的答案。 - Peter
那 HTTPS 呢? - NorCalKnockOut

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

嗯...所以,我可以使用ajax调用一个php文件,该文件将加载我实际想要的文件内容,计算出它的大小,然后将文件内容和大小都返回给javascript。这样做的好处是可以轻松地从另一个域中调用内容,听起来绝对棒极了 - 完全不是我原本想要的解决方案,但是这是一个非常好的解决方案。 - Peter
是的,我以前用Java创建授权下载控制器时做过这件事。你可能还想看看CMS的建议--我从未想过使用HEAD命令,但如果你只需要文件大小,那可能会更加出色。 - Kaleb Brasee
到目前为止,这是唯一避免gzip编码导致未发送回内容长度的答案。 - user3338098

0
var XHRObj = $.ajax({
    type:'HEAD',
    url:'/',
    success:function(data) {
        console.log( XHRObj.getResponseHeader('Content-Length') )
    }
})

你可以通过发送 HEAD HTTP 请求来查询 Content-Length,然后返回 X 字节的数据。

如果使用gzip编码,则不会发送content-length头。 - user3338098

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接