簡體   English   中英

在Django中傳遞S3標頭的正確方法是什么?

[英]What is the correct way of passing S3 headers inside Django?

我在Django應用S3BotoStorage用作DEFAULT_FILE_STORAGE 因此,我上傳到我的應用程序的所有文件都上傳到了S3存儲桶。 我想使用SSE-C加密我的文件,所以我遵循AWS 這里提供的文檔。 我在settings.py添加了以下幾行

# settings.py
AWS_S3_ENCRYPTION = True
key = ...
key_md5 = ...
AWS_HEADERS = {
    'x-amz-server-side-encryption-customer-algorithm': 'AES256',
    'x-amz-server-side-encryption-customer-key': key,
    'x-amz-server-side-encryption-customer-key-MD5': key_md5,
}

但是,一旦添加這些標頭,我就會開始收到以下錯誤。

[Error 104] Connection Reset by Peer

沒有頭文件上傳正常。

我不為什么會這樣?

請讓我知道是否需要更多詳細信息。

簡短的答案:由於boto2的實現已過時,因此您使用的包裝器不支持自定義加密密鑰。

長答案:這是S3BotoStorage的來源。 現在這里是如何boto2保存文件的難題。 您在哪里找到標題? 所以我看到他們建議這樣

AWS_HEADERS = {
    'Expires': 'Thu, 15 Apr 2010 20:00:00 GMT',
    'Cache-Control': 'max-age=86400',
}

沒有將加密頭傳遞給boto的示例。 您提供的標頭用於REST API,而不是S3BotoStorage包裝器。 因此,您可能只能使用此功能,而忘記為加密算法設置AWS_HEADERS,並提供自定義加密密鑰。

令人困惑的是,在boto2中,S3對象名稱是調用鍵(在boto3中,他們對其進行了改進並顯式地將其稱為key_name)。 這與加密密鑰無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM