botocore.exceptions.ClientError: The Content-Length header is required
Self Checks
- [x] This is only for bug report, if you would like to ask a question, please head to Discussions.
- [x] I have searched for existing issues search for existing issues, including closed ones.
- [x] I confirm that I am using English to submit this report (我已阅读并同意 Language Policy).
- [x] [FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)
- [x] Please do not modify this template :) and fill in all the required fields.
Dify version
v1.0.0
Cloud or Self Hosted
Self Hosted (Docker)
Steps to reproduce
While using s3 compatible object storage, and upload a file, error will occur:
it's an issue of boto3 >= 1.36.1, even latest one 1.37.8. it's okay of version boto3==1.35.99. reference: https://github.com/boto/boto3/issues/4398
✔️ Expected Behavior
no error
❌ Actual Behavior
error log:
ent_version=1.0.0 (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1010)'))).
2025-03-07 08:18:06.962 ERROR [Dummy-2] [ext_storage.py:79] - Failed to save file upload_files/5d097fc2-5b69-4ac1-919b-195e621466b2/fbb713de-4a71-4094-9925-54ecda784719.txt
Traceback (most recent call last):
File "/app/api/extensions/ext_storage.py", line 77, in save
self.storage_runner.save(filename, data)
File "/app/api/extensions/storage/oracle_oci_storage.py", line 26, in save
self.client.put_object(Bucket=self.bucket_name, Key=filename, Body=data)
File "/app/api/.venv/lib/python3.12/site-packages/botocore/client.py", line 570, in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/botocore/context.py", line 124, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/botocore/client.py", line 1031, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (MissingContentLength) when calling the PutObject operation: The Content-Length header is required
2025-03-07 08:18:06.964 ERROR [Dummy-2] [app.py:875] - Exception on /console/api/files/upload [POST]
Traceback (most recent call last):
File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 489, in wrapper
resp = resource(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask/views.py", line 110, in view
return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 604, in dispatch_request
resp = meth(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/controllers/console/wraps.py", line 147, in decorated
return view(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/libs/login.py", line 94, in decorated_view
return current_app.ensure_sync(func)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/controllers/console/wraps.py", line 27, in decorated
return view(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 696, in wrapper
resp = f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/app/api/controllers/console/wraps.py", line 86, in decorated
return view(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/controllers/console/files.py", line 72, in post
upload_file = FileService.upload_file(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/services/file_service.py", line 67, in upload_file
storage.save(file_key, content)
File "/app/api/extensions/ext_storage.py", line 80, in save
raise e
File "/app/api/extensions/ext_storage.py", line 77, in save
self.storage_runner.save(filename, data)
File "/app/api/extensions/storage/oracle_oci_storage.py", line 26, in save
self.client.put_object(Bucket=self.bucket_name, Key=filename, Body=data)
File "/app/api/.venv/lib/python3.12/site-packages/botocore/client.py", line 570, in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/botocore/context.py", line 124, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/app/api/.venv/lib/python3.12/site-packages/botocore/client.py", line 1031, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (MissingContentLength) when calling the PutObject operation: The Content-Length header is required
The error you're encountering is related to the boto3 library versions >= 1.36.1, where the Content-Length header is required but not automatically set during file uploads to S3-compatible storage. This issue does not occur with boto3 version 1.35.99.
To resolve this, you can try the following approaches:
-
Downgrade
boto3: Temporarily downgrade toboto3version 1.35.99, where this issue does not occur. -
Manually Set Content-Length: Modify the code to manually set the
Content-Lengthheader when calling theput_objectmethod. You can calculate the content length from the data being uploaded and include it in the request. -
Check for Updates: Keep an eye on updates from the
boto3library or related discussions, as a fix might be released in future versions.
These steps should help you work around the issue until a permanent fix is available in the boto3 library.
To continue talking to Dosu, mention @dosu.
Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other
Is it a good solution? I see https://github.com/boto/boto3/issues/4398, many other projects have done a downgrade.
Downgrade boto3: Temporarily downgrade to boto3 version 1.35.99, where this issue does not occur.