# DifyのファイルアップロードAPIでアップロードしたファイルを、ワークフローで扱う方法

> DifyのファイルアップロードAPIを使用してアップロードしたファイルをワークフローAPIで扱う方法について解説します。

- 公開日: 2025-03-28
- 著者: そうま
- タグ: AI, 社内イベント
- URL: https://tech.anycloud.co.jp/articles/dify-file-upload

---

[Dify + Next.jsで天気に合わせた服を提案するアプリを作ってみた](/articles/weather-wear-report/) の記事で紹介したアプリでDifyのファイルアップロードAPIを使用しました。

今回はファイルアップロードAPIを使用して、アップロードしたローカルファイルをワークフローAPIで使用する方法について簡単に紹介します。

※ DifyやDifyのワークフローについての説明は省略しています 🙏

## ファイルアップロードAPI

Difyでアプリを作成して公開すると、以下のスキーマのファイルアップロードAPIもデフォルトで公開されます。

### request body

※ Difyアプリ内のAPIドキュメントから引用

このインターフェースは`multipart/form-data`リクエストを必要とします。

-   `file` (File) 必須 アップロードするファイル。
-   `user` (string) 必須 ユーザー識別子、開発者のルールで定義され、アプリケーション内で一意でなければなりません。

### response

※ Difyアプリ内のAPIドキュメントから引用

アップロードが成功すると、サーバーはファイルのIDと関連情報を返します。

-   `id` (uuid) ID
-   `name` (string) ファイル名
-   `size` (int) ファイルサイズ（バイト）
-   `extension` (string) ファイル拡張子
-   `mime_type` (string) ファイルのMIMEタイプ
-   `created_by` (uuid) エンドユーザーID
-   `created_at` (timestamp) 作成タイムスタンプ、例：1705395332

responseを見ると分かるように、DifyのファイルアップロードAPIでは、ファイルアップロード先のURLは取得できません。

ファイルのidが発行されるので、このidをワークフローAPIに投げることで、ワークフローでローカルファイルを扱うことができます。

## ワークフローAPI

ワークフローAPIも、Difyでワークフローアプリを作成すると、デフォルトで公開されます。

### request body

※ Difyアプリ内のAPIドキュメントから引用

-   `inputs` (object) 必須 アプリで定義されたさまざまな変数値の入力を許可します。
    -   `type` (string) サポートされているタイプ:
        -   `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
        -   `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
        -   `audio` ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
        -   `video` ('MP4', 'MOV', 'MPEG', 'MPGA')
        -   `custom` (他のファイルタイプ)
    -   `transfer_method` (string) 転送方法、画像URLの場合は`remote_url` / ファイルアップロードの場合は`local_file`
    -   `url` (string) 画像URL（転送方法が`remote_url`の場合）
    -   `upload_file_id` (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じて取得する必要があります（転送方法が`local_file`の場合）

ワークフローAPIにファイルをリクエストする場合は、上記の inputs パラメータを使用します。

APIドキュメントの内容通りですが、ローカルファイルを使用したい場合は、type、transfer\_method、upload\_file\_id を指定してください。

transfer\_method に local\_file を指定することで、ファイルアップロードAPIでアップロードしたファイルを扱うことが可能です。

また、upload\_file\_id には、ファイルアップロードAPIを通じて取得したファイルIDを設定してください。

```plaintext
{
  inputs: {
    file: {
      type: 'image',
      transfer_method: 'local_file',
      upload_file_id: file_id,
    }
  }
}
```

また、ローカルファイルではなく、リモートにアップロードされたファイルを扱う場合は、transfer\_methodをremote\_urlにして、upload\_file\_idの代わりに、urlを指定します。

```plaintext
{
  inputs: {
    file: {
      type: 'image',
      transfer_method: 'remote_url',
      url: url,
    }
  }
}
```

## 最後に

今回の内容はDifyのAPIドキュメントをしっかり読めば分かる内容ですが、自分がアプリを実装していた当時は、ここまでドキュメントが充実していませんでした。

そのため、Dify のファイルアップロードAPIを通じて取得したファイルIDをワークフロー API に渡す、という点を理解するのに少し詰まってしまい、備忘録的な意味も込めて、今回は記事にさせていただきました！
