[PR #10796] feat: support custom tool upload file #26940

Closed
opened 2026-02-21 20:40:33 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/10796

State: closed
Merged: Yes


Summary

Tip

Close issue syntax: Fixes #<issue number> or Resolves #<issue number>, see documentation for more details.

as OPENAPI doc, https://swagger.io/docs/specification/v3_0/describing-request-body/file-upload/
we can support file upload in custom tools.
some people require this feature: https://github.com/langgenius/dify/discussions/9322

Screenshots

Before: After:

Example YAML Schema:

openapi: 3.0.0
info:
  title: File Upload API
  version: 1.0.1
  description: API for uploading audio files for processing

servers:
  - url: https://ai.gitee.com/api/serverless

paths:
  /whisper-base/speech-to-text:
    post:
      summary: Upload and process file
      security:
        - BearerAuth: []
      requestBody:
        required: true
        content:
          audio/flac:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The audio file to be processed
              required:
                - file
      responses:
        '200':
          description: Successful response

Example JSON Schema:

{
  "openapi": "3.0.0",
  "info": {
    "title": "File Upload API",
    "version": "1.0.0",
    "description": "An API for uploading files with metadata"
  },
  "servers": [
    {
      "url": "https://httpbin.org"
    }
  ],
  "paths": {
    "/post": {
      "post": {
        "summary": "Upload a file",
        "description": "Upload a file with associated metadata",
        "operationId": "uploadFile",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The file to upload"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          }
        }
      }
    }
  }
}

Checklist

Important

Please review the checklist below before submitting your pull request.

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/10796 **State:** closed **Merged:** Yes --- # Summary > [!Tip] > Close issue syntax: `Fixes #<issue number>` or `Resolves #<issue number>`, see [documentation](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more details. as OPENAPI doc, https://swagger.io/docs/specification/v3_0/describing-request-body/file-upload/ we can support file upload in custom tools. some people require this feature: https://github.com/langgenius/dify/discussions/9322 # Screenshots <table> <tr> <td>Before: </td> <td>After: </td> </tr> <tr> <td><img src="https://github.com/user-attachments/assets/3f2882d6-9119-42eb-a40a-1d097ad5a0dc" /></td> <td><img src="https://github.com/user-attachments/assets/09e6f3c5-c147-449a-a859-f92426f09ec5" /></td> </tr> </table> Example YAML Schema: ``` openapi: 3.0.0 info: title: File Upload API version: 1.0.1 description: API for uploading audio files for processing servers: - url: https://ai.gitee.com/api/serverless paths: /whisper-base/speech-to-text: post: summary: Upload and process file security: - BearerAuth: [] requestBody: required: true content: audio/flac: schema: type: object properties: file: type: string format: binary description: The audio file to be processed required: - file responses: '200': description: Successful response ``` Example JSON Schema: ``` { "openapi": "3.0.0", "info": { "title": "File Upload API", "version": "1.0.0", "description": "An API for uploading files with metadata" }, "servers": [ { "url": "https://httpbin.org" } ], "paths": { "/post": { "post": { "summary": "Upload a file", "description": "Upload a file with associated metadata", "operationId": "uploadFile", "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary", "description": "The file to upload" } } } } } }, "responses": { "200": { "description": "Successful response" } } } } } } ``` # Checklist > [!IMPORTANT] > Please review the checklist below before submitting your pull request. - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:40:33 -05:00
yindo closed this issue 2026-02-21 20:40:33 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#26940