2017-01-27 12 views
0

Unityを使用してFirebase Storageに保存されているイメージをダウンロードしようとしています。私はUnity Firebase SKD(ベータ版で...)を使用します。私はこのURLで、WWWやブラウザを使用してファイルをダウンロードしようとすると、私はエラーを取得URLをUnity(Firebase URL)でエスケープする

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

... 
// 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()); 
    }); 

コンソール出力は次のようになります。これは私のコードです。良いURLは(Firebaseコンソールによってコピー)する必要があります:

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"を囲む2つのスラッシュは有効ですが、その後のスラッシュはすべて%2Fとして表示されます。

URL全体をエスケープしないでください。これは一般的なエスケープの問題ではありません。これは、Uriクラスが%2Fを間違ってデコードして、スラッシュにならないときに、関連するモノの問題が単調に発生するという副作用です。

"/ o /"の後のスラッシュを%2Fに置き換えるだけで、この問題を回避できます。ユニティのライブラリもこのバグの影響を受けている

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

(そう、それはあなたが文字列を修正し、バック団結にそれを渡しても、破損する可能性):ただし、UnityWebRequestと、対応する問題について知っている必要があります。その問題は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

これはURLをエスケープするのには良い答えですが、この特定のケースでは、デコードされたスラッシュだけでURL全体をエスケープしないでください。 –

+0

@BenjaminWulfe URL全体を再エスケープするとどうなりますか? – Programmer

+0

URLは実際にはすでにエスケープされているので(デコードされたスラッシュを除く)、エスケープシーケンスが再エンコードされて2重にエンコードされるようになります。したがって、URLエンコードされたスペース(%20)は%2520として終わる可能性があります。これはあなたが望むものではありません。 –

関連する問題