Herkesten sakladığınız ve sadece erişim isteği isteyen kullanıcıların dosyalara erişmesini sağlamak istiyorsanız ve bu isteğinizi Amazon üzerinde bulunan S3 bucketınızda yapacaksanız derdinizin çözümü burada,
- AWS S3 de tutulan dosyalar private olarak geçmelidir.
- Amazon S3 API anahtarınızda
s3:GetObject
yetkisi mutlaka bulunmalıdır. django-storages
Kullanılıyorsa ve dosyalar onun üzerinden sisteme yükleniyorsa, imza hatası alınmaması için mutlakaAWS_S3_SIGNATURE_VERSION = 's3v4'
veAWS_S3_ADDRESSING_STYLE = 'path'
parametrelerisettings.py
dosyasına eklenmelidir.
import boto3
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import View
from django.http import HttpResponseRedirect
class AwsS3UrlGenerator(LoginRequiredMixin, View):
def get(self, *args, **kwargs):
s3_client = boto3.client(
"s3",
aws_access_key_id="",
aws_secret_access_key="",
region_name="eu-west-1",
config=Config(
s3={"addressing_style": "path"}, signature_version="s3v4"
),
)
try:
presigned_url = s3_client.generate_presigned_url(
"get_object",
Params={
"Bucket": "bucket-name",
"Key": str(self.request.GET["p"]),
},
ExpiresIn=300,
HttpMethod="GET",
)
except ClientError as e:
return None
return HttpResponseRedirect(presigned_url)