web-dev-qa-db-ja.com

Firebase Storageを使用して画像への「直接リンク」を保存する方法

Firebase Storageに保存されている画像に直接リンクでアクセスする必要があります。たとえば

http://myfirebasehost.com/storage/imgIwant.png

私が知っている限り、プロトコルgs://ただし、リンクではアクセスできません。SDKAPIでのみアクセスできます。

Firebaseプラットフォームを使用して、上記のとおりのソリューションが必要です。できなければ、他の提案を受け入れます。

私のコードには、画像へのリンクである定数があります。この図を更新する場合、新しい展開を作成する必要があることがわかります。代わりに、同じURLで画像を更新します。 Storageが提供するURLにはリンクからアクセスできないため、Firebaseでこれを行うことはできません(私の知る限り)。

別の方法としては、画像をbase64に変換してデータベースに保存することもできますが、非常に広範で非実用的です。

19

Firebase Storageでは、ファイルを表すために使用できる2つのURLが提供されます。

_// "Private" internal URL, only accessible through Firebase Storage API
// This is protected by Firebase Storage Security Rules & Firebase Auth
gs://bucket/object

// "Public" unguessable URL, accessible by anyone with the link
// This is secured because that token is *very* hard for someone to guess
https://firebasestorage.googleapis.com/v0/bucket/object?alt=media&token=<token>
_

最初のオプションでは、reference.getDownloadURL()メソッドを使用して、内部_gs://_ URLをパブリック_https://_ URLに変換する必要があります。

2番目のオプションでは、この公開されているが推測できないURLを信頼できる個人と共有し、Firebaseへの認証やアプリの使用なしでコンテンツにアクセスできるようにします。家族の写真をGoogleフォトと共有することを考えてください。おそらく、クリーンなURLを使用したパブリック共有を希望しない限り、この動作で十分です。ブラウザでこのURLを使用するか、他のHTTPライブラリを使用してダウンロードできます。これらのファイルも(参照なしで)ダウンロードできるため、サードパーティのライブラリを入手する必要はありません。使用するだけです。

詳細については、 our docs を読むことを強くお勧めします。

15
Mike McDonald

例によってgs storage locationdirect urlに変換する方法:

gs://nobs-f32f2.appspot.com/profile/1s_by_wlop-dc1sdan.jpg

になる

https://firebasestorage.googleapis.com/v0/b/nobs-f32f2.appspot.com/o/profile%2F1s_by_wlop-dc1sdan.jpg?alt=media

1st blobパスを必ずURLエスケープしてください。たとえば、%2Fの場合はスラッシュ(/)を、%20の場合はスペース()を交換します。

2nd必要に応じて読み取りアクセスを開いていることを確認してください。移動するための公開ルールは次のとおりです。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if true;
      allow write: if request.auth != null;
    }
  }
}
6
fionbio

ただリンクを取得したい人のために

console > Storage

特定の写真を選択すると、下のリンクが表示されます。 enter image description here

5
Ted