diff --git a/storages/backends/s3boto3.py b/storages/backends/s3boto3.py index 2ccba09cb..52821550a 100644 --- a/storages/backends/s3boto3.py +++ b/storages/backends/s3boto3.py @@ -488,18 +488,6 @@ def _save(self, name, content): if self.preload_metadata: self._entries[encoded_name] = obj - # If both `name` and `content.name` are empty or None, your request - # can be rejected with `XAmzContentSHA256Mismatch` error, because in - # `django.core.files.storage.Storage.save` method your file-like object - # will be wrapped in `django.core.files.File` if no `chunks` method - # provided. `File.__bool__` method is Django-specific and depends on - # file name, for this reason`botocore.handlers.calculate_md5` can fail - # even if wrapped file-like object exists. To avoid Django-specific - # logic, pass internal file-like object if `content` is `File` - # class instance. - if isinstance(content, File): - content = content.file - self._save_content(obj, content, parameters=parameters) # Note: In boto3, after a put, last_modified is automatically reloaded # the next time it is accessed; no need to specifically reload it. diff --git a/tests/test_s3boto3.py b/tests/test_s3boto3.py index a4489fcfa..201b3acc6 100644 --- a/tests/test_s3boto3.py +++ b/tests/test_s3boto3.py @@ -116,7 +116,7 @@ def test_storage_save(self): obj = self.storage.bucket.Object.return_value obj.upload_fileobj.assert_called_with( - content.file, + content, ExtraArgs={ 'ContentType': 'text/plain', 'ACL': self.storage.default_acl, @@ -135,7 +135,7 @@ def test_storage_save_with_acl(self): obj = self.storage.bucket.Object.return_value obj.upload_fileobj.assert_called_with( - content.file, + content, ExtraArgs={ 'ContentType': 'text/plain', 'ACL': 'private', @@ -154,7 +154,7 @@ def test_content_type(self): obj = self.storage.bucket.Object.return_value obj.upload_fileobj.assert_called_with( - content.file, + content, ExtraArgs={ 'ContentType': 'image/jpeg', 'ACL': self.storage.default_acl, @@ -170,7 +170,7 @@ def test_storage_save_gzipped(self): self.storage.save(name, content) obj = self.storage.bucket.Object.return_value obj.upload_fileobj.assert_called_with( - content.file, + content, ExtraArgs={ 'ContentType': 'application/octet-stream', 'ContentEncoding': 'gzip',