django models - تحميل إلى الأمازون S3 باستخدام Boto3 والعودة ورل العام




django-models amazon-s3 (2)

عام تحاول تحميل الملفات إلى s3 باستخدام Boto3 وجعل هذا الملف الذي تم تحميله العام وإعادته كعنوان ورل.

class UtilResource(BaseZMPResource):
class Meta(BaseZMPResource.Meta):
    queryset = Configuration.objects.none()
    resource_name = 'util_resource'
    allowed_methods = ['get']

def post_list(self, request, **kwargs):

    fileToUpload = request.FILES
    # write code to upload to amazone s3
    # see: https://boto3.readthedocs.org/en/latest/reference/services/s3.html


    self.session = Session(aws_access_key_id=settings.AWS_KEY_ID,
                  aws_secret_access_key=settings.AWS_ACCESS_KEY,
                  region_name=settings.AWS_REGION)

    client = self.session.client('s3')
    client.upload_file('zango-static','fileToUpload')


    url = "some/test/url"
    return self.create_response(request, {
        'url': url // return's public url of uploaded file 
    })

بحثت وثائق كاملة لم أتمكن من العثور على أي روابط تصف كيفية القيام بذلك يمكن للشخص شرح أو توفير أي مورد حيث يمكنني العثور على سولتيون؟


إم في نفس الوضع. غير قادر على العثور على أي شيء في مستندات Boto3 خارج gener_presigned_url الذي ليس ما أحتاجه في حالتي لأن لدي كائنات S3 قابلة للقراءة العامة.

أفضل ما توصلت إليه هو:

bucket_location = boto3.client('s3').get_bucket_location(Bucket=s3_bucket_name)
object_url = "https://s3-{0}.amazonaws.com/{1}/{2}".format(
    bucket_location['LocationConstraint'],
    s3_bucket_name,
    key_name)

قد تحاول نشر على قائمة القضايا جيثوب boto3 من أجل حل أفضل.


كان لي نفس القضية. بافتراض أنك تعرف اسم الجرد الذي تريد تخزين بياناتك فيه، يمكنك عندئذ استخدام ما يلي:

import boto3
from boto3.s3.transfer import S3Transfer

credentials = { 
    'aws_access_key_id': aws_access_key_id,
    'aws_secret_access_key': aws_secret_access_key
}

client = boto3.client('s3', 'us-west-2', **credentials)
transfer = S3Transfer(client)

transfer.upload_file('/tmp/myfile', bucket, key,
                     extra_args={'ACL': 'public-read'})

file_url = '%s/%s/%s' % (client.meta.endpoint_url, bucket, key)






boto3