streaming_form_data
provides a Python parser for parsing multipart/form-data
input chunks (the encoding used when submitting data over HTTP through HTML forms).
this speeds up file uploads to my Flask app by more than factor 10
$ pip install streaming-form-data
In case you prefer cloning the Github repository and installing manually, please note that main
is the development branch, so stable
is what you should be working with.
>>> from streaming_form_data import StreamingFormDataParser >>> from streaming_form_data.targets import FileTarget, NullTarget, GCSTarget, S3Target, ValueTarget >>> >>> headers = {"Content-Type": "multipart/form-data; boundary=boundary"} >>> >>> parser = StreamingFormDataParser(headers=headers) >>> >>> parser.register("name", ValueTarget()) >>> parser.register("file-local", FileTarget("/path/to/file.txt")) >>> parser.register("file-s3", S3Target("s3://bucket/path/to/key")) >>> parser.register("file-gcs", GCSTarget("gs://bucket/path/to/key")) >>> parser.register("discard-me", NullTarget()) >>> >>> for chunk in request.body: ... parser.data_received(chunk) ... >>>
Up-to-date documentation is available on Read the Docs.
Please make sure you have Python 3.9+, uv, and task installed.
Since this package includes a C extension, please make sure you have a working C compiler available. On Debian-based distros this usually means installing the build-essentials
package.
Git clone the repository: git clone https://github.com/siddhantgoel/streaming-form-data
Install the packages required for development: uv sync
That's basically it. You should now be able to run the test suite: task test
Note that if you make any changes to Cython files (.pyx, .pxd, .pxi
), you'll need to re-compile (task compile
) and re-install streaming_form_data
before you can test your changes.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4