メインコンテンツまでスキップ

APIを使ったファイルのアップロードについて

概要

APIを利用してファイルをアップロードする方法は、用途に応じて以下の2つがあります。

  • コンテンツに紐づけてアップロードする: Files::uploadのエンドポイントを利用して一時領域にファイルをアップロードし、取得したfile_idをコンテンツ更新等の各エンドポイントにPOSTします。
  • ファイルマネージャーに直接アップロードする: FileManager::uploadのエンドポイントを利用して、ファイルマネージャーの指定ディレクトリにファイルを直接アップロードします。

コンテンツに紐づけてアップロードする

コンテンツ、フォーム、メンバーなどにAPIを利用してファイルをアップロードする場合、Files::uploadのエンドポイントを利用して、ファイルをKurocoの一時領域にアップロードし、応答として返されるfile_idを各エンドポイントにPOSTしてコンテンツを更新します。

SwaggerUIで動作の確認をすると、以下の手順になります。

画像(KurocoFilesにアップロード)

画像(KurocoFilesにアップロード)(コンテンツ)や、アップロードファイル(メンバー)の場合は以下のようにFiles::uploadで取得したfile_idをエンドポイントにPOSTします。

  1. Files::uploadのエンドポイントにファイルをアップロードする。
    Files::uploadのエンドポイントを開くと、[ファイルを選択]のボタンが表示されるので、アップロードするファイルを選択します。

Image from Gyazo

ヒント

ファイル送信時のリクエストヘッダには'Content-Type': 'multipart/form-data'を指定します。

  1. レスポンスからfile_idを確認する
    ファイルの一時領域へのアップロードが成功すると、file_idを含むレスポンスが表示されます。

Image from Gyazo

  1. file_idをコンテンツを更新するエンドポイントにPOSTする
    更新・追加したいコンテンツを操作するエンドポイントに対して、file_idを指定してリクエストを送ります。

Image from Gyazo

  1. リクエストが成功したことを確認する
    レスポンスとコンテンツを確認します。

Image from Gyazo

フロントエンドでの具体的なコードの例は関連ドキュメントを参照してください。

WYSIWYG

WYSIWYGの拡張項目の場合はFiles::uploadで取得したfile_idをHTMLのsrc属性に指定すると、画像がファイルマネージャーの/files/user/topics_img/配下のディレクトリに保存されて更新されます。

  1. Files::uploadのエンドポイントにファイルをアップロードする。
    Files::uploadのエンドポイントを開くと、[ファイルを選択]のボタンが表示されるので、アップロードするファイルを選択します。

Image from Gyazo

  1. レスポンスからfile_idを確認する
    ファイルの一時領域へのアップロードが成功すると、file_idを含むレスポンスが表示されます。

Image from Gyazo

  1. HTML要素のsrc属性に一時パスを入力したHTMLを準備する

<img src=\"INPUT_TEMPORARY_PATH_HERE\">のようにsrc属性にFiles::uploadのエンドポイントから取得したfile_idを指定したHTMLを準備します。
次のようになります。

<figure class=\"image\"><img style=\"aspect-ratio:2000/1334;\" src=\"files/temp/75a0d4626ac4bab6d4ec6f8969233fd493db2f7093b67cf92a782f8814e37530.png\" width=\"2000\" height=\"1334\"></figure>
ヒント

HTMLに含まれる"\でエスケープしてください。

  1. src属性にfile_idを含むHTMLをエンドポイントにPOSTする
    更新・追加したいコンテンツを操作するエンドポイントに対して、src属性にfile_idを含むHTMLをPOSTします。

Image from Gyazo

  1. リクエストが成功したことを確認する
    レスポンスとコンテンツを確認します。

Image from Gyazo

Image from Gyazo

仕様:

  • HTML要素にはsrc属性が含まれている必要があります。
  • アップロードストレージにはKurocoFiles、S3、GCSが利用可能です。
  • WYSIWYGへのAPIを使ったファイルアップロードは画像ファイル(jpeg,jpg,gif,png,bmp,webp,avif,svg)のみが許可されています。
  • 一度のリクエストで複数の一時ファイルパスを使用することが可能です。
  • 一度のリクエストで同じ一時ファイルパスを複数回使用することが可能です。例えば、以下のようにリクエストすると、WYSIWYGの項目に同じ画像が2つ追加されます。
    `<figure class=\"image1\"><img src=\"TEMPORARY_PATH\"></figure><figure class=\"image2\"><img src=\"TEMPORARY_PATH\"></figure>`
  • 複数のAPIリクエストで同じ一時ファイルパスを使用することが可能です。
  • WYSIWYIGへのAPIを利用した画像アップロードは追加項目の名称がext_xのサイトで動作します。追加項目の名称がext_col_xのサイトでは動作しません。

ファイルマネージャーに直接アップロードする

コンテンツに紐づけず、ファイルマネージャーの指定ディレクトリにファイルを直接アップロードする場合は、FileManager::uploadのエンドポイントを利用します。

Files::uploadとの違いは以下の通りです。

Files::uploadFileManager::upload
用途コンテンツ・フォーム・メンバーにファイルを紐づけるファイルマネージャーにファイルを直接配置する
アップロード先一時領域(files/temp/ファイルマネージャーの指定ディレクトリ
レスポンスfile_id(一時ファイルパス)url(アップロード先のファイルURL)
ファイルの利用方法file_idを他のエンドポイントにPOSTして紐づけるアップロード完了後すぐにURLでアクセス可能

以下の手順でアップロードが可能です。

  1. FileManager::uploadのエンドポイントにファイルをアップロードする。
    FileManager::uploadのエンドポイントを開き、アップロードするファイルを選択します。

  2. レスポンスからアップロード先のURLを確認する。
    アップロードが成功すると、ファイルのurlを含むレスポンスが返されます。

ヒント

ファイル送信時のリクエストヘッダには'Content-Type': 'multipart/form-data'を指定します。

備考

FileManager::uploadを利用するには、APIを実行するメンバーに「ファイル」の「更新」権限が必要です。

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。