我有一個將文件上傳到AWS S3存儲桶的django項目。例如,如果使用{% static %}
標記在模板中呈現上傳的文件和靜態文件,則它們將正確顯示。但是,當我想使用model_object.image.url
訪問javascript代碼中的圖像時,圖像不顯示。我檢查了代碼,都認爲是在JS代碼呈現並粘貼它在瀏覽器的URL,它給了我這個錯誤:無法訪問使用Javascript代碼保存在存儲桶中的圖像
<Error>
<Code>AccessDenied</Code>
<Message>Query-string authentication requires the Signature, Expires and AWSAccessKeyId parameters</Message>
<RequestId>xxxx</RequestId><HostId>xxx</HostId>
</Error>
一些更多的信息,可能是有用的:
的用戶上傳圖像,然後他可以裁剪圖像。我用Croppie這一點,它是這樣使用的圖像的URL一個JS庫:
$('.div').croppie({
url: '{{ model_object.image.url }}',
});
一切本地工作。這是AWS的一個問題,我顯然不明白。
繼solarissmoke
評論,我說這個水桶的政策,我的水桶:
{
"Version": "2012-10-17",
"Id": "Policy1468082822770",
"Statement": [
{
"Sid": "Stmt1468082812651",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::criptolibertad/*"
}
]
}
但是,它仍然無法正常工作。我注意到在模板中呈現的URL不工作看起來是這樣的:如果我直接從我的桶打開資源
https://criptolibertad.s3.amazonaws.com/Django/0_squashmigrations.jpeg?Signature=HFDdOYvrfqz5DG ...
,網址如下:
https://s3-us-west-2.amazonaws.com/criptolibertad/Django/0_squash+migrations.jpeg?X-Amz-Date=201607 ...
我還權點擊該文件夾並選擇Make Public
以防萬一。
任何意見將有所幫助。
看起來您的S3存儲桶/對象不是公用的,他們需要在沒有身份驗證的情況下訪問它們。看到[這個問題](http://stackoverflow.com/questions/19176926/how-to-make-all-objects-in-aws-s3-bucket-public-by-default)的一些想法。 – solarissmoke
@solarissmoke感謝您的評論,我現在添加了一項政策。但它仍然不起作用。 – alejoss