2015-04-02 7 views
13

Ich habe Thins Link unten, und wenn ich versuche, es zuzugreifen erscheint eine XML-Datei mit der Aufschrift "Acess denied".Machen Sie eine Datei in S3 öffentlich mit Python und Boto

Und ich muss zu AWS Management Konsole gehen und diese part-0000 Datei öffentlich machen, damit ich es zugreifen kann.

Wissen Sie, wie kann ich Berechtigungen mit Boto mit Python geben, so kann ich auf diesen Link zugreifen, ohne auf aws managmet Konsole gehen und die Datei veröffentlichen zu müssen?

downloadLink = 'https://s3.amazonaws.com/myFolder/uploadedfiles/2015423/part-00000' 

Antwort

23

Sie Dies sollte eine Idee geben:

import boto.s3 
conn = boto.s3.connect_to_region('us-east-1') # or region of choice 
bucket = conn.get_bucket('myFolder') 
key = bucket.lookup('uploadedfiles/2015423/part-00000') 
key.set_acl('public-read') 

In diesem Fall ist public-read einer der Dosen ACL-Richtlinien von S3 unterstützt und alle, die Datei zu lesen erlauben würde.

+0

Funktioniert nicht für mich zu arbeiten. Sagt "keine Funktion namens Lookup". Verwenden Sie boto3 – Adi

+4

Richtig, das Code-Snippet ist für Boto. Nicht boto3. – garnaat

7
from boto3.s3.transfer import S3Transfer 
    import boto3 
    . 
    . 
    .#have all the variables populated which are required below 
    . 

    client = boto3.client('s3', aws_access_key_id=access_key, 
               aws_secret_access_key=secret_key) 
      transfer = S3Transfer(client) 
      transfer.upload_file(filepath, bucket_name, folder_name+"/"+filename) 
    response = client.put_object_acl(ACL='public-read', Bucket=bucket_name, Key=folder_name+"/"+filename) 
3

Dies scheint mit Boto 2.42.0 und Python 3

s3 = boto.connect_s3() 
b = s3.get_bucket('brianray') 
k = Key(b) 
k.key = new_file_name 
k.set_contents_from_filename(new_file_name) 
k.set_acl('public-read') 
k.generate_url(expires_in=0, query_auth=False) 
Verwandte Themen