やりたいこと
XamarinでニフティクラウドのmBaaSと連携してファイルのやり取りをしたい。
コミュニティSDK(https://github.com/NCMBMania/ncmb_xamarin) はあるがファイルのアップロードしか対応していない。
実装
API実行結果をStreamで返却されるようにする
ExecメソッドはJObjectでしか返せなかったので、ExecFileメソッドを作ってStreamで返せるようにした。
public async Task<Stream> ExecFile()
{
~省略~
var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStreamAsync();
return body;
}
ファイルダウンロード用メソッド追加
GetClient()で生成するGetRequestのNameにfiles、ObjectIdにファイル名を設定する。
ファイル取得APIは以下のヘッダーにファイル名を指定する必要がある。
-H "Content-Type: application/json" https://mbaas.api.nifcloud.com/2013-09-01/files/test.png
/files/test.png
のfilesがName、ObjectIdがtest.pngに対応する。
public async Task<Stream> FetchFile(string filename)
{
var r = GetClient();
r.Name = "files";
r.ObjectId = filename;
var results = await r.ExecFile();
return results;
}
あとがき
XamarinでニフクラmBaaSにファイルを保存してやり取りしたかったのでできるか確認してみた。ファイルストアにファイルをアップロードしてデータストアにファイル名を管理して、選択してダウンロードする感じで実現できた。
データストアにバイナリ保存はできなさそうだったので上記の方法を使った。