django models - Boto3 का उपयोग करके अमेज़ॅन एस 3 पर अपलोड करें और सार्वजनिक यूआरएल वापस लौटाएं




django-models amazon-s3 (2)

Iam B3 3 का उपयोग करके S3 को फाइल अपलोड करने की कोशिश कर रहा है और उस अपलोड की गई फ़ाइल को सार्वजनिक करता है और इसे यूआरएल के रूप में लौटाता है

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 डॉक्स में जेनरेट करने के लिए कुछ भी नहीं पा सकने वाले_प्रेस्सेट_अर्नल जो कि मेरे मामले में मेरे लिए आवश्यक नहीं है क्योंकि मेरे पास सार्वजनिक पठनीय एस 3 ऑब्जेक्ट हैं I

सबसे अच्छा मैं के साथ आया है:

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 github मुद्दों की सूची पर पोस्ट करने का प्रयास कर सकते हैं।


मेरी भी यही समस्या थी। मान लें कि आप बाल्टी का नाम जानते हैं जहां आप अपना डेटा संग्रहीत करना चाहते हैं, तो आप निम्न का उपयोग कर सकते हैं:

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