2015-09-02 51 views
0

我想知道是否有方法檢查外部文件是否在線,或者是否可用於AngularJS(或JavaScript)。如果我能以某種方式確定尺寸(會是一個加號)。我首先想到了使用$ http的頭函數。但事實證明這並不總是工作,我似乎無法找到在標題信息的大小...獲取外部文件信息(狀態和大小)的問題

var file = { src: '//code.jquery.com/jquery.min.js' }; 

$http.head(file.src) 
    .success(function(data, status, headers) { 
     file.size = headers(['content-length']); // always empty 
     file.status = 'online'; 
    }) 
    .error(function() { 
     file.status = 'offline'; 
    }); 

任何人任何想法的?

回答

0

好的。我得出的結論是,目前沒有(可靠的)使用JavaScript的方法。我嘗試通過將腳本標記注入隱藏的iframe來實現解決方案,然後使用onload或onerror事件檢查結果。但是,當外部文件出現錯誤時,您也正在加載代碼。所以即使這種方法也不可行。

因此,從這一點上我將在服務器端搜索解決方案。

1

您正在尋找的標題是HTTP content-length

$http.head(file.src) 
    .then(function(data, status, headers, config) { 
    file.size = headers(['content-length']); 
    file.status = 'online'; 
    }); 

當然,因爲你是在瀏覽器中運行,你將只能執行請求到服務器或到指定CORS headerAccess-Control-Allow-Origin任何服務器。

對於其他任何事情,您必須通過自己的服務器代理請求。但是,請注意,並非所有服務器都會響應HEAD請求 - 在這種情況下,您必須執行完整的GET,並在超時後(文件處於聯機狀態並下載)取消請求或引發錯誤(文件處於脫機狀態)。

+0

我搜索了這個標題,並找不到它。似乎這個信息丟失了某處... – Velter

+0

@Velter是的,你忘了在你的回調中包含返回的參數。用適當的代碼編輯答案。 – Marcelo

+0

不,我知道我忘了返回參數,只是一個小例子。你在這裏寫的我也試過。但標題'content-length'始終是emtpy。這裏的主要問題是沒有獲得大小(很好),它有一定的方法來知道文件是可用的,這不是$ http.head的情況... – Velter