def post(self, request): import uuid from rest_framework import status from rest_framework.response import Response from drf_to_s3 import s3 from drf_to_s3.access_control import upload_prefix_for_request key = '%s/%s' % (upload_prefix_for_request(request), str(uuid.uuid4())) upload_uri = s3.build_signed_upload_uri( bucket=self.get_aws_upload_bucket(), key=key, access_key_id=self.get_aws_access_key_id(), secret_key=self.get_aws_secret_key(), expire_after_seconds=self.expire_after_seconds ) data = { 'key': key, 'upload_uri': upload_uri, } return Response(data=data, status=status.HTTP_200_OK)
def test_can_put_to_generated_signed_url(self): import os, tempfile, requests, uuid from drf_to_s3 import s3 from django.conf import settings self.new_key = '%s/%s' % ('*****@*****.**', str(uuid.uuid4())) aws_access_id = os.environ['AWS_ACCESS_KEY_ID'] secret_key = os.environ['AWS_SECRET_ACCESS_KEY'] signed_url = s3.build_signed_upload_uri( bucket=self.bucket_name, key=self.new_key, access_key_id=aws_access_id, secret_key=secret_key, expire_after_seconds=60 ) with tempfile.NamedTemporaryFile() as f: f.write(os.urandom(1024)) resp = requests.put(signed_url, data=f.read()) self.assertEquals(resp.status_code, 200)