テーマを変更中で、表示が崩れているところがあります…!

【bubble】API経由でファイルアップロードをしてみた話

.bubble
.bubble

忙しかったはずなのに、ちょっと時間が空いてしまって戸惑い中ですこんばんは。こんにちは?

以前、ファイルの文字コードを判定&変更するプラグインを作成したりしました。

ここで、一つ問題が。

PrivateファイルはJsなどからアクセスできない

File Uploader’s value:encoded in base64 の値って、Private化したファイルだとアクセス不可能なんでしたっけ・・・?

プラグイン内でPrivate化されたファイルを取得した場合は見られないことはわかっていたのですが、大丈夫だったからbase64にしたはずだったんですよね。。

まぁそんなこんなで、同じロジックで書いたシステムでのバグ報告がありまして。原因はアップロード前のCSV文字コードチェックでJavaScript内でエラーが起きて、アップロードできないよってことでした。

APIでファイルをPrivate化してアップロード

まぁそういう問題があったわけで、Private化してファイルをアップロードする方法を試したわけですね。

フォーラムを検索して存在は知っていたのですが、試したことはなく、今回とうとう実装しました。

API Connectorをインストール

ファイルアップロードをAPI Connectorを使って設定していきます。

まずはAPI Connectorをインストールしておいてください。

API Tokenを作成

Settings > APIタブからAPIを有効にし、API Tokenを作成します。API Token Labelは任意で良いです。

API有効化・トークンの生成

API Connectorの設定

Plugins タブからAPI Connectorを選択し、Add another APIをクリックします。

API Connectorを設定

API Nameをわかりやすい名前でつけておきます。

Shared headers for all callsで、
・Key : Authorization
・Value : Bearer <APIキー>
とします。BearerとAPIキーの間に半角スペースを入れてください。

API Connectorを設定

次に実際のAPI呼び出しを書いていきます。

各パラメータは以下のように設定してください。

ファイルアップロードAPIの設定

エンドポイントは アプリURL/version-test/fileupload です。

ここで、エンドポイントに開発環境/本番環境を切り替える「/version-xxx/」をパラメータで入れておくと便利です。

パラメータ内容
contentsファイルのbase64データ
privateprivate化する場合はtrue、しない場合はfalse
attach_toprivate化する場合のレコードのunique_id
※テストではユーザーのunique_idを利用
name保存するファイル名
APIパラメータの内容

テストでcontentsに設定する内容は、以下のようなサイトを利用して、適当なテキストファイル等をbase64エンコードし、設定しておきます。

ではここで、initialize callをクリックしてみましょう。

アップロード結果

うまくいくと、このようにアップロードされたURLが返ってきます。

アップロードされたファイルの確認

最後に、アップロードされたファイルを確認しておきましょう。

Data > File Managerタブからファイルを検索してみてください。

Attached toに設定した値が入っていると思います。

ファイルの確認

ワークフローから、ファイルをアップロードする

それでは、設定したAPIを使ってワークフローからファイルをアップロードしてみましょう。

画面にFileUploaderとボタンを配置します。ここではFile Uploaderの Make this file privateはチェックを入れずにおきます。

ファイルアップローダーを設定

ボタンクリック時のワークフローを設定していきます。

ワークフローでアップロード

ボタンクリック時のアクションを先ほど設定したAPI Connectorを選択し、それぞれ画像のようにFileUploaderの値を利用します。

エンドポイントのパラメータ「ver」は、isn’t live version:formatted as textを利用すると楽ちんです。

プレビューして実行してみよう

実行後にFile Managerを見てましょう。

実行結果

API Connectorを経由してAPIでファイルアップロードが行えました!

ただし、File Uploaderに指定したファイルはPrivate化されずにストレージに残っています。見られたくないファイルのはずですので、ワークフローで削除してくださいね。

さいごに

以上のような手順でAPI経由でのファイルアップロード&Private化ができました。

若干面倒ではありますが、bubbleの仕様上、一度アップロードしたもののアクセス権変更ができませんので仕方ありません。。

実際の実装では、以下のような感じでワークフローを組んでいます。

ファイルアップロード時(File Uploader’s value is changed)

プラグインによるファイルの文字コードチェック
→問題なければAPIでファイルアップロード
→(その他処理)
→File Uploaderのファイル削除

その他処理の中で、File Uploaderのファイルを利用しているので、すべての処理終了後にFile Uploaderのファイルを削除しています。

その他の処理がキャンセルされる場合にも、File Uploaderのファイル削除をしています。

タイトルとURLをコピーしました