{"record":{"id":"4ed30c0b58eaa92a","repo":"reflex-dev/reflex","slug":"upload-event-args-field-is-too-large","errorCode":null,"errorMessage":"Upload event args field is too large.","messagePattern":"Upload event args field is too large\\.","errorType":"exception","errorClass":"MultiPartException","httpStatus":null,"severity":"error","filePath":"packages/reflex-components-core/src/reflex_components_core/core/_upload.py","lineNumber":318,"sourceCode":"    _extra_args_raw: str | None = None\n    _started: bool = False\n    _seen_upload_chunk: bool = False\n    _part_count: int = 0\n    _emitted_chunk_count: int = 0\n    _emitted_bytes: int = 0\n    _stream_chunk_count: int = 0\n\n    def on_part_begin(self) -> None:\n        \"\"\"Reset parser state for a new multipart part.\"\"\"\n        self._current_part = _UploadChunkPart()\n\n    def on_part_data(self, data: bytes, start: int, end: int) -> None:\n        \"\"\"Record streamed chunk data for the current part.\"\"\"\n        if self._current_part.is_text_field:\n            self._args_buffer += data[start:end]\n            if len(self._args_buffer) > MAX_UPLOAD_EVENT_ARGS_BYTES:\n                msg = \"Upload event args field is too large.\"\n                raise MultiPartException(msg)\n            return\n        if (\n            not self._current_part.is_upload_chunk\n            or self._current_part.filename is None\n        ):\n            return\n\n        message_bytes = data[start:end]\n        self._chunks_to_emit.append(\n            UploadChunk(\n                filename=self._current_part.filename,\n                offset=self._current_part.offset + self._current_part.bytes_emitted,\n                content_type=self._current_part.content_type,\n                data=message_bytes,\n            )\n        )\n        self._current_part.bytes_emitted += len(message_bytes)\n        self._emitted_chunk_count += 1","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-components-core/src/reflex_components_core/core/_upload.py#L300-L336","documentation":"Streaming uploads encode the event handler's bound arguments as a single text field in the multipart body, capped at MAX_UPLOAD_EVENT_ARGS_BYTES to prevent unbounded memory use. Exceeding the cap while accumulating part data raises MultiPartException, aborting the request.","triggerScenarios":"A multipart form field named as the upload event-args field whose accumulated data exceeds MAX_UPLOAD_EVENT_ARGS_BYTES, parsed by the streaming upload parser.","commonSituations":"Passing very large state values (huge strings/JSON blobs) as bound args to an upload handler: rx.upload_files(State.big_payload); or a malicious/oversized request body.","solutions":["Move large data out of the handler args — pass an ID/reference and fetch the data in state","Trim the bound arguments passed to the upload event handler","Configure/review MAX_UPLOAD_EVENT_ARGS_BYTES if you genuinely need bigger args"],"exampleFix":"// before\nrx.upload(..., on_upload=State.handle_upload(State.big_json))\n\n// after\nrx.upload(..., on_upload=State.handle_upload())  # read big data from state","handlingStrategy":"validation","validationCode":"import json\nassert len(json.dumps(bound_args)) < MAX_UPLOAD_EVENT_ARGS_BYTES","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pass only small scalar args to upload handlers","Keep large payloads in State and reference them by ID"],"tags":["upload","payload-limit","multipart"],"backgroundTag":"request-body-too-large","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}