LoginSignup
4
1

More than 5 years have passed since last update.

admin-on-restで画像以外のファイルをアップロードする

Posted at

はじめに

admin-on-restはReactベースでかかれた管理画面用コンポーネント集で、REST APIを前提としていて割とデフォルトでよしなにやってくれていい感じのライブラリ。

しかし、けっこうレールがかっちりしてて、カスタマイズ性も割とあるんだけどレールを外れる際は割とめんどくさい。
そんな中で、ファイルのアップロードという基本的なことに対応してなかったりもしていて、

SS_ 2017-04-19 15.03.56.png
https://github.com/marmelab/admin-on-rest/issues/564

という状態。

とりあえずPR送るほどは洗練できてないけどとりあえず素朴にファイルアップロードができる状態はできたので記録しておく。

TL;DR

'redux-form'のField使ってコンポーネントつくって、
FormDataベースのREST Clientをかく

gist
https://gist.github.com/maruware/edcf91e08f083e9354e431ad561b6f99

問題

タイトルで"画像以外"と書いたように、画像についてはImageInputというD&Dしてサムネも展開されて、というリッチなアップローダーがある。

ImageInput
https://github.com/marmelab/admin-on-rest/pull/77

上記のPRの中にも記述があるが、最終的にREST Clientまわりで画像ファイルをBase64してPUTしている。
なぜかというとREST Clientで用意されている2つの実装(simple, jsonServer)がJSONリクエストベースになっているから。

しかし、動画ファイルのような大きなファイルをBase64するのは重すぎる。

ということで

  • 独自にInput用のコンポーネントをつくる必要
  • FormDataベースのREST Clientを実装する必要

がある。

解決

admin-on-restのドキュメントに

Writing Your Own Input Component

If you need a more specific input type, you can also write it yourself. You’ll have to rely on redux-form’s component, so as to handle the value update cycle.
https://marmelab.com/admin-on-rest/Inputs.html#writing-your-own-input-component

とあるように、
redux-formのFieldを使ってコンポーネントをつくる。

あとはFormDataベースのREST Clientをかけばいける。

くわしくはgist参照

4
1
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
4
1