LoginSignup
0
0

More than 1 year has passed since last update.

NCMB Kotlin SDKを使ったファイルストア利用について

Posted at

NCMB Kotlin SDKは先日リリースされ、現在も活発に開発を行っています。NCMBの1機能であるファイルストア(写真やテキストファイルを扱うストレージ)にファイルをアップロードする際に悩む可能性がありそうなので備忘録として書いておきます。

v1.1.0におけるNCMBFileの使い方

v1.1.0におけるファイルストアへのファイルアップロードは次のようになっています。

constructor(fileName:String, fileData:File) : super("files") {
		mIgnoreKeys = this.ignoreKeys
		this.fileName = fileName
		this.fileData = fileData
}

fileDataとして渡すのはFileオブジェクトになります。写真ピッカーを使って取得されるのはUriクラスですが、そのままでは使えないので注意してください。

解決策

解決策は2つあります。

  1. 実際のファイルオブジェクトを取得する
  2. テンポラリファイルに書き出す

実際のファイルオブジェクトを取得する

Uriから本当のFileを取得する方法はあるのですが、そのためにはファイルストレージへのアクセス権限が必要になります。これはちょっと面倒そうです。

テンポラリファイルに書き出す

テンポラリファイルに書き出す方法であれば、さほど難しくありません。

// 出力先(テンポラリ)
val outputDir = context.cacheDir
val outputFile = File.createTempFile(fileName, ".${extension}", outputDir)
// bitmapをByteArrayに変換する
val stream = ByteArrayOutputStream()
if (extension == "jpg" || extension == "jpeg") {
		bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream)
} else if (extension == "png") {
		bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
}
// テンポラリファイルに出力
outputFile.writeBytes(stream.toByteArray())

アップロードする

後はこのFileを使ってファイルストアへのアップロード処理を行います。

val file = NCMBFile(fileName = fileName, fileData = outputFile)
file.save()

削除する

アップロード処理が終わったら、テンポラリファイルは削除します。

Files.deleteIfExists(tempFile.toPath())

まとめ

ファイルストアを使えば、たった1行のコードでファイルをクラウドストレージにアップロードできます。Kotlin SDKはまだ開発が活発なので、さらに便利な機能が追加されていきます。ぜひあなたのKotlinアプリ開発で役立ててください。

ドキュメント : 開発者向けドキュメント | ニフクラ mobile backend

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0