2009-09-27 100 views
12

这里就是我希望做的事:获取大小通过AJAX请求

我想送一个Ajax请求到一个文件中(最好是用jQuery),一旦该文件已加载,确定大小的请求文件。

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

回答

37

您可以发出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'); 
    } 
}); 
+0

+ upvote,这应该是真正的答案:) – 2009-09-27 20:04:23

+0

谢谢@meder! – CMS 2009-09-27 20:05:56

+0

我同意 - 我实际上最终可能会使用其他方法来实现跨域功能,但这实际上是我询问时所寻找的答案。 – Peter 2009-09-27 20:06:42

2

您可以创建一个服务器端命令,它接受文件的路径和名称,打开文件以获取长度,然后将大小发送回客户端。你怎么做取决于你使用的服务器端语言。这是你正在寻找的行动的类型?

+0

嗯...所以,我可以使用ajax调用一个php文件,它会加载我真正想要的文件的内容,找出它有多大,然后将文件内容和大小都返回给javascript 。这样做会让我可以毫无困难地从另一个域名中调用内容。这听起来非常出色 - 完全不是我以为我在寻找的东西,而是一个绝妙的解决方案。 – Peter 2009-09-27 20:02:11

+0

是的,在创建授权的下载控制器时,我已经使用Java完成了这项工作。您可能还想看看CMS的建议 - 我从来没有想过使用HEAD命令,但如果您只需要文件大小,那可能会更加出色。 – 2009-09-27 20:06:22

+0

这是迄今为止唯一的答案,它避免了gzip编码导致内容长度不被发回。 – user3338098 2015-05-21 16:09:47

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

你基本上做一个HEAD HTTP请求和查询内容长度,它返回X字节。

+0

如果使用gzip编码,则不会发送内容长度标头 – user3338098 2015-08-14 14:50:13