将Amazon S3与Heroku,Python和Flask结合使用

Wes*_*sey 10 python file-upload heroku amazon-s3 flask

我正在尝试使用Flask在Heroku上运行一个简单的图像上传应用程序.我在这里按照教程:http://flask.pocoo.org/docs/patterns/fileuploads/

但是,我想使用S3来存储文件而不是临时目录,因为Heroku不允许您写入磁盘.我找不到任何关于如何专门为Heroku和Flask做这个的例子.

mat*_*t b 12

在我看来,在将上传文件存储到临时文件的示例代码中,您只需替换file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))为将文件上载到S3的代码.

例如,从链接页面:

def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            s3 = boto.connect_s3()
            bucket = s3.create_bucket('my_bucket')
            key = bucket.new_key(filename)
            key.set_contents_from_file(file, headers=None, replace=True, cb=None, num_cb=10, policy=None, md5=None) 
            return 'successful upload'
    return ..
Run Code Online (Sandbox Code Playgroud)

或者,如果您想异步上传到S3,可以使用Heroku提供的任何排队机制.


Yan*_*nin 8

这是一个古老的问题,但我认为自从亚马逊向S3 引入 CORS支持以来,最好的方法是从用户的浏览器直接上传到S3 - 没有任何东西触及你的服务器.

是一个非常简单的烧瓶项目,它显示了如何做到这一点.