feat: enable multi-file upload for chat and agent workflows (#12977)

### Closes: #12921 

### What problem does this PR solve?

Previously, multi-file upload was not working correctly across the
application:

- **Chat**: UI displayed "Upload max 5 files" but only the first file
was actually uploaded
- **Agent conversational mode**: Frontend sent multiple files but
backend only processed one
- **Agent task-mode file inputs**: Explicitly limited to single file
only

This PR enables proper multi-file upload support for both chat and agent
workflows, allowing users to upload and process multiple files (up to 5)
as the UI originally suggested.

**Changes:**
- `web/src/pages/next-chats/hooks/use-upload-file.ts`: Process all files
instead of only `files[0]`
- `api/apps/canvas_app.py`: Handle multiple files via
`files.getlist("file")`
- `web/src/pages/agent/debug-content/uploader.tsx`: Allow up to 5 files
with `multiple={true}`
- `agent/component/begin.py` & `fillup.py`: Support file arrays while
maintaining backward compatibility

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
BitToby
2026-02-04 12:03:21 +02:00
committed by GitHub
parent ffdf19b27f
commit 4d4b5a978d
7 changed files with 64 additions and 24 deletions

View File

@ -253,11 +253,14 @@ async def upload(canvas_id):
user_id = cvs["user_id"]
files = await request.files
file = files['file'] if files and files.get("file") else None
file_objs = files.getlist("file") if files and files.get("file") else []
try:
return get_json_result(data=FileService.upload_info(user_id, file, request.args.get("url")))
if len(file_objs) == 1:
return get_json_result(data=FileService.upload_info(user_id, file_objs[0], request.args.get("url")))
results = [FileService.upload_info(user_id, f) for f in file_objs]
return get_json_result(data=results)
except Exception as e:
return server_error_response(e)
return server_error_response(e)
@manager.route('/input_form', methods=['GET']) # noqa: F821