2017-01-27 49 views
0

我嘗試使用Unity下載存儲在Firebase存儲中的圖像。我使用Unity Firebase SKD(在Beta中...)。這是我的代碼:使用Unity進行URL轉義(Firebase URL)

... 
// Points to "1/preview.jpg" 
    Firebase.Storage.StorageReference img_ref = folder1_ref.Child("/preview.jpg"); 

// Fetch the download URL 
img_ref.GetDownloadUrlAsync().ContinueWith(task => { 
    Debug.Log(task.Result.ToString()); 
    }); 

控制檯輸出爲:

https://firebasestorage.googleapis.com/v0/b/insidehome-29c9e.appspot.com/o/1/preview.jpg?alt=media&token=092a8de8-5047-4bce-b179-edd4101847a3 

如果我嘗試使用WWW或瀏覽器下載文件,這個URL,我得到一個錯誤。好的URL應該(通過火力地堡控制檯複製):

https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Finsidehome-29c9e.appspot.com%2Fo%2F1%2Fpreview.jpg%3Falt%3Dmedia%26token%3D092a8de8-5047-4bce-b179-edd4101847a3 

的差異只在單詞「預覽」前的單斜線(「/」)。

這是很奇怪嗎?我怎麼修復它?我嘗試轉義URL但它更改了所有斜槓:

https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Finsidehome-29c9e.appspot.com%2Fo%2F1%2F99%2Fobama.jpg%3Falt%3Dmedia%26token%3D8a33f998-e271-4d7e-8848-356a332b7750 

而且它不起作用。我只需要更改參數(右)斜槓

回答

1

嗨Firebase工程師在這裏。這是一個錯誤,我很抱歉你遇到了這個問題。 「/ o /」之後應該沒有斜槓。圍繞字母「o」的兩個斜槓是有效的,但是之後的每一個斜槓都應該顯示爲%2F。

這不是一個普遍的轉義問題,因爲您不應該重新轉義整個URL。這是Uri類錯誤地將%2F解碼爲斜槓時的相關單聲道問題的副作用。

您可以通過在「/ o /」後用%2F替換斜槓來解決此問題。但是,你應該知道有UnityWebRequest相應的問題:

https://issuetracker.unity3d.com/issues/unitywebrequest-dot-url-unescapes-escaped-symbol

其中統一的圖書館也正在受到這個錯誤(所以它可能如果您修復串收支平衡,並將其傳遞迴單位)。看起來這個問題在5.5.1中得到了修復(我已經在5.6版中對它進行了驗證)。

在firebase方面,我們將更改我們的代碼以解決單聲道中的此問題,以便返回正確的url。在我們解決這個問題之前,我建議使用替換斜線的解決方法,或者僅使用Firebase本身來下載文件。

+0

另外,嘗試使用uri.OriginalString - 它返回字符串,因爲它是在Uri決定「修復」它之前。 –

0

您可以使用Unity的WWW.EscapeURL來轉義url。

string escapedUrl = WWW.EscapeURL("http://www.someurl"); 
+0

這是一個很好的答案,以逃避一個網址,但在這種特殊情況下,你不應該重新逃脫整個網址,只是解碼的斜線。 –

+0

@BenjaminWulfe當你重新逃離整個網址時會發生什麼? – Programmer

+0

由於url實際上已經被轉義(除了已解碼的斜槓),您將最終重新編碼轉義序列,以便它們變爲雙重編碼。所以一個url編碼的空間(%20)可能會以%2520結尾 - 這不是你想要的。 –