2015-02-17 72 views
11

我有一個小的AngularJS應用程序,我試圖打開上傳的圖像,並且遇到了角度在URL開頭添加「unsafe:」的問題。我已經加入我的應用程序的配置,以消毒URL以下行,但它不是爲我工作:當試圖下載文件時,角度添加「不安全」到網址

$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|file|blob:chrome-extension):|data:image|\//); 

我採用了棱角分明V1.3.0,所以我使用了正確的屬性名稱。我主要使用Chrome,但在其他瀏覽器中遇到同樣的問題。此外,我的圖像的開頭看起來像這樣:

unsafe:data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg... 

任何想法我在我的正則表達式中缺少什麼? 在此先感謝!

+0

您可能想要刪除最後的'|',否則任何具有正斜槓的東西都會匹配。 – ndn 2015-08-17 19:43:06

+0

如果你可以簡化問題陳述,有人可以幫助你。你正在使用正則表達式。你只能做像查找/替換等東西。任何引擎都能理解你使用的簡單表達式。 – sln 2015-08-18 15:38:27

+0

@sln:s/he正在將正則表達式傳遞給此角度方法:[https://docs.angularjs.org/api/ng/provider/$compileProvider](https://docs.angularjs.org/api/ng/供應商/ $ compileProvider) – 2015-08-19 15:58:07

回答

0

如果你沒有regexp參數$compileProvider.imgSrcSanitizationWhitelist()它返回當前定義的正則表達式。

在一個空角1.3.0運行驗證碼:

app.config(function ($compileProvider) { 
    console.log($compileProvider.imgSrcSanitizationWhitelist()); // 
}); 

我得到了這樣的結果 - /^\s*((https?|ftp|file|blob):|data:image\/)/

並以base64使用基本<img ng-src="{{main.src}}">實際工作,你可以看到here編碼JPEG,和another one與PNG。也看看控制檯看到正則表達式。

我碰到另一種測試是在data:image/jpeg;base64,搬出範圍綁定字符串,並把它的NG-SRC:

<img ng-src="data:image/jpeg;base64,{{main.src}}">

正如你可以看到它worked爲好。

長話短說 - 您不需要在1.3.0及更高版本中爲data:image/*定義正則表達式,因爲它是默認定義的。

我不能確定有什麼問題,但也許你已經有另一個定義 imgSrcSanitizationWhitelist在你的代碼的某處或數據uri被破壞。