C#でFirebaseを使ってみよう!(2) Storageを使ってみる

あすかです。

前回の記事では、Firebaseの準備とユーザ作成、認証を行いました。

kmycode.hatenablog.jp

今回は、早速ですがStorageでファイヤー!してみます!



Storageでファイヤー!する

必要なnugetパッケージ

下の2つです。このうち、Authenticationは(1)で導入済みだと思います。

www.nuget.org

www.nuget.org

現時点で、StorageとAuthenticationのパッケージは、依存関係を持っていません。
つまり、Storageをダウンロードしても、Authenticationはついてこないです。
Storageを認証無しで使う方法があるからだと思いますが、そこのあたりは注意してくださいね!

参照について

Storageでファイヤー!するためには、まずStorageへの参照を作らなければいけません。
読み込むときも、書き込むときも、必ずこの参照を使います。
これ大切です!重要です!必須です!

ということで、パスから参照を作成するメソッドを作ってみます。

ここで手に入れた参照をあんなことやこんなことに使って‥‥ムヒヒ
参照を手に入れる時、認証で得た情報を使っていることに注目してください。

文字列でファイヤー!する

文字列をアップロードする

stringをbyte[]に変換してから、PutAsyncでファイヤー!します。


文字列をダウンロードする

ファイヤー!からは直接文字列を取得することはできません。
ダウンロードするためのURLが手に入りますので、あとは自分でHTTPから落としてくださいねって感じです。
ちなみにダウンロードURLにHTTP接続する時、認証などは不要です。


実行してみる!

めんどいのでWPFだけで試します。
もちろんXFでも動く!(多分)

f:id:kmynews:20170211174940p:plain

ログインしないままアップロードしようとすると、エラーが出ます。

f:id:kmynews:20170211175024p:plain

ログインしたらアップロードできました!(`・ω・´)

f:id:kmynews:20170211175037p:plain

ダウンロードもできました!

f:id:kmynews:20170211175101p:plain

ここでFirebaseのコンソールからStorageを表示させると、ちゃんとtest.txtがアップロードされていることがわかります。

f:id:kmynews:20170211175202p:plain

ファイルでファイヤー!する

文字列の送受信だけでなく、画像とかバイナリデータとかももちろんできます!
ただ、WPFはいいんですが、Xamarin.Formsでファイルを扱う手段がありません。そこでPCLStorageを使います。
インスコしときます!

NuGet Gallery | PCL Storage - Portable Storage APIs 1.0.2

ファイルをアップロードする

PCLStorageを使ってストレージを手に入れ、ファイヤー!に直接つなげます。


ファイルをダウンロードする

HttpClientからStreamが手に入りますので、それをPCLStorageにつなげます。


実行!

f:id:kmynews:20170211175722p:plain

アップロード&ダウンロード両方やりました!
さて、ここでファイヤー!のコンソールのStorageを見てみましょう。

f:id:kmynews:20170211175825p:plain

なんということでしょう!画像がアップロードされているではありませんか!
次に、ダウンロードしたファイル(ここではtest_download.png)を見てみます!

f:id:kmynews:20170211175924p:plain

ぎゃーーー!入ってる入ってる!いい!(`・ω・´)ファイヤー!

まとめ

ファイヤー!

今回のコードは、GitHubにあげてます。

github.com

余談ですが、実はFirebaseはStorage用のREST APIを公開していません。
でも、FirebaseのStorageって、実はGoogle Cloud Storageをラッピングしてるだけなんです。
Google Cloud StorageがREST APIを公開していますので、
今回使用したライブラリでは、それを呼び出してると思います。
ていうか作者のブログで「Web APIJavaScriptを模倣しましたよー!」と書いてあったので、結果的にそうなってるのかなと。

次回はDatabaseでファイヤー!します。
Databaseはちょっと長くなりそう。。

kmycode.hatenablog.jp