Fix S3 upload

This commit is contained in:
Mawoka
2025-11-01 14:06:26 +01:00
parent 048f5d3e7b
commit abd2155469
+13 -2
View File
@@ -42,7 +42,13 @@ class S3Storage:
if not self.client.bucket_exists(self.bucket_name): if not self.client.bucket_exists(self.bucket_name):
self.client.make_bucket(self.bucket_name) self.client.make_bucket(self.bucket_name)
def _generate_aws_signature_v4(self, method: str, path: str, expiry: int = None) -> Tuple[dict, str]: def _generate_aws_signature_v4(
self,
method: str,
path: str,
expiry: int | None = None,
payload_hash: str | None = None,
) -> Tuple[dict, str]:
path = f"/{self.bucket_name}{path}" path = f"/{self.bucket_name}{path}"
service = "s3" service = "s3"
@@ -58,6 +64,7 @@ class S3Storage:
canonical_querystring = f"Expires={expiry}" canonical_querystring = f"Expires={expiry}"
# For S3, the payload hash must be included and signed # For S3, the payload hash must be included and signed
if payload_hash is None:
payload_hash = hashlib.sha256(b"").hexdigest() payload_hash = hashlib.sha256(b"").hexdigest()
canonical_headers = f"host:{self.host}\n" f"x-amz-content-sha256:{payload_hash}\n" f"x-amz-date:{amz_date}\n" canonical_headers = f"host:{self.host}\n" f"x-amz-content-sha256:{payload_hash}\n" f"x-amz-date:{amz_date}\n"
@@ -122,7 +129,11 @@ class S3Storage:
size: int | None, size: int | None,
mime_type: str | None = None, mime_type: str | None = None,
) -> None: ) -> None:
headers, url = self._generate_aws_signature_v4(method="PUT", path=f"/{file_name}") file.seek(0)
payload = file.read()
payload_hash = hashlib.sha256(payload).hexdigest()
file.seek(0)
headers, url = self._generate_aws_signature_v4(method="PUT", path=f"/{file_name}", payload_hash=payload_hash)
file_size = 0 file_size = 0
while True: while True:
chunk = file.read(1024) chunk = file.read(1024)