From 5cee7ca012b541d6be03ceb3f25d27dab2a28576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erling=20B=C3=B8rresen?= Date: Sun, 19 Apr 2015 13:35:07 +0200 Subject: [PATCH 1/4] Fixing bytes handling for azure storage --- storages/backends/azure_storage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/storages/backends/azure_storage.py b/storages/backends/azure_storage.py index c62c91dce..ea47cace5 100644 --- a/storages/backends/azure_storage.py +++ b/storages/backends/azure_storage.py @@ -57,8 +57,13 @@ def size(self, name): return properties["content-length"] def _save(self, name, content): + if hasattr(content, 'chunks'): + content_data = b''.join(chunk for chunk in content.chunks()) + else: + content_data = content.read() + self.connection.put_blob(self.azure_container, name, - content, "BlockBlob") + content_data, "BlockBlob") return name def url(self, name): From 77d133c1d8e07dca0439a9ff783342439eeca9f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erling=20B=C3=B8rresen?= Date: Sun, 19 Apr 2015 13:36:16 +0200 Subject: [PATCH 2/4] Adding content type to azure storage --- storages/backends/azure_storage.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/storages/backends/azure_storage.py b/storages/backends/azure_storage.py index ea47cace5..b0f93429b 100644 --- a/storages/backends/azure_storage.py +++ b/storages/backends/azure_storage.py @@ -57,13 +57,19 @@ def size(self, name): return properties["content-length"] def _save(self, name, content): + if hasattr(content.file, 'content_type'): + content_type = content.file.content_type + else: + content_type = mimetypes.guess_type(name)[0] + if hasattr(content, 'chunks'): content_data = b''.join(chunk for chunk in content.chunks()) else: content_data = content.read() self.connection.put_blob(self.azure_container, name, - content_data, "BlockBlob") + content_data, "BlockBlob", + x_ms_blob_content_type=content_type) return name def url(self, name): From 277c6d1ab94d69dff40fc1fea915c3b5ffe66e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erling=20B=C3=B8rresen?= Date: Sun, 19 Apr 2015 13:37:34 +0200 Subject: [PATCH 3/4] Returning absolute url from azure storage Using MEDIA_URL from settings as newer versions of django default storage does. --- storages/backends/azure_storage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storages/backends/azure_storage.py b/storages/backends/azure_storage.py index b0f93429b..d50bcab58 100644 --- a/storages/backends/azure_storage.py +++ b/storages/backends/azure_storage.py @@ -73,4 +73,4 @@ def _save(self, name, content): return name def url(self, name): - return "%s/%s" % (self.azure_bucket, name) + return "{}{}/{}".format(setting('MEDIA_URL'), self.azure_container, name) From 8d4fb0d91a2915e6e04090bc41accfb0e01b0693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erling=20B=C3=B8rresen?= Date: Tue, 19 May 2015 13:39:22 +0200 Subject: [PATCH 4/4] Adding missing import of mimetypes --- storages/backends/azure_storage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/storages/backends/azure_storage.py b/storages/backends/azure_storage.py index d50bcab58..f2fd5e68a 100644 --- a/storages/backends/azure_storage.py +++ b/storages/backends/azure_storage.py @@ -1,4 +1,5 @@ import os.path +import mimetypes from django.core.files.base import ContentFile from django.core.exceptions import ImproperlyConfigured