2016-10-07 2 views
0

Ich bin in der Heroku Dokumentation (https://devcenter.heroku.com/articles/s3-upload-python) über einen direkten Upload zu S3 mit einer vor-signierten Anfrage von Heroku.vor-signierte Anfrage von Heroku erhalten

Für den folgenden Code wird von Ihnen erwartet, dass Sie die Datei an Heroku senden, um die vor-signierte Anfrage zu erhalten, oder können Sie einfach die Dateiinformationen (Name, Typ usw.) senden?

@app.route('/sign_s3/') 
def sign_s3(): 
    S3_BUCKET = os.environ.get('S3_BUCKET') 

    file_name = request.args.get('file_name') 
    file_type = request.args.get('file_type') 

    s3 = boto3.client('s3') 

    presigned_post = s3.generate_presigned_post(
    Bucket = S3_BUCKET, 
    Key = file_name, 
    Fields = {"acl": "public-read", "Content-Type": file_type}, 
    Conditions = [ 
     {"acl": "public-read"}, 
     {"Content-Type": file_type} 
    ], 
    ExpiresIn = 3600 
) 

    return json.dumps({ 
    'data': presigned_post, 
    'url': 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, file_name) 
    }) 

Antwort

0

Der von Ihnen gepostete Code verwendet nur den Dateinamen und den Typ, um eine vorzeichenbehaftete S3-URL zu generieren, sodass die Datei nicht verwendet wird.

Sobald der Server diese S3-URL generiert, wird sie an den Client gesendet, damit er diese URL zum Hochladen der Datei verwenden kann.

Also die Antwort ist nein, Ihre Datei wird nicht an Heroku gesendet, nur die Dateiinformationen. Die Datei wird direkt von der Clientseite an S3 gesendet.

Weitere Informationen zu vordefinierten S3-URLs finden Sie unter here

Verwandte Themen