2009-09-27 99 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