2015-06-12 55 views
0

我試圖將我的django應用程序的靜態文件同步到Azure存儲。在運行manage.py collectstatic命令時,我嘗試將靜態文件寫入存儲容器時出現錯誤。Azure存儲容器API請求認證與Django應用程序失敗

我收到錯誤。在HTTP請求中找到的MAC簽名與任何計算簽名都不相同。

此錯誤的常見原因是兩個服務器上不匹配的時間簽名,但這不是我的情況的問題。

我使用Django的包django-azure-storageazure-sdk-for-python格式化請求。

http請求,並試圖連接到天青儲存容器時所產生的響應的Here is a gist

這些輸出有什麼看起來不對嗎?

+0

你能分享你的代碼嗎?我傾向於認爲該錯誤與內容類型的請求標題有關。 –

+0

代碼可以在上面鏈接的django-azure-storage repo中找到。 – rawbeans

回答

1

我已經下載了Django的包,下面你的描述Azure的SDK。我編寫了一個樣本來重現此問題,但它在我身邊正常工作。以下是我所做的步驟: 設置環境:Python 2.7和Azure SDK(0.10.0)。

1.Trying使用Django的Azure的存儲 這是非常令人沮喪的,我並沒有將其導入到我的項目成功,因爲這是我第一次用它。通常,我利用Azure Python SDK directly。這次我在我的項目中複製了storage.py作爲AzureStorage類。

#need import django contentfile type 
from django.core.files.base import ContentFile 

#import the AzureStorage Class form my project 
from DjangoWP.AzureStorage import AzureStorage 
# my local image path 
file_path="local.png"; 
# my Azure storage blob file 

def djangorplugin(): 
    azurestorage=AzureStorage(myaccount, mykey,"mycontainer") 

    stream=open(file_path, 'rb')  
    data = stream.read() 
    #need convert file to ContentFile 
    azurestorage.save("Testfile1.png",ContentFile(data)) 

enter image description here 2.You很多想知道如何使用Azure的SDK的Python直接,下面的代碼片段供大家參考:

from azure.storage.blobservice import BlobService 
#my local image path 
file_path="local.png"; 
def upload(): 
    blob_service = BlobService(account_name=myaccount, account_key=mykey) 
    stream=open(file_path, 'rb')  
    data = stream.read() 
    blob_service.put_blob("mycontainer","local.png",data,"BlockBlob") 

如果您有任何疑慮,請隨時讓我們知道。

0

我錯誤地使用設置DEFAULT_FILE_STORAGE而不是STATICFILES_STORAGE來覆蓋同步靜態文件時使用的存儲後端。改變這個設置解決了這個問題。

試圖使用django-storages,其指定使用的DEFAULT_FILE_STORAGE設置它的文檔時,我也遇到了問題。但是,使用此包對STATICFILES_STORAGE也解決了我遇到的問題。