我正在尝试使用Flask在Heroku上创建一个简单的图像上传应用。我正在遵循这里的教程:http://flask.pocoo.org/docs/patterns/fileuploads/
然而,我想使用S3存储文件而不是临时目录,因为Heroku不允许写入磁盘。我找不到针对Heroku和Flask如何实现这一点的任何示例。
我正在尝试使用Flask在Heroku上创建一个简单的图像上传应用。我正在遵循这里的教程:http://flask.pocoo.org/docs/patterns/fileuploads/
然而,我想使用S3存储文件而不是临时目录,因为Heroku不允许写入磁盘。我找不到针对Heroku和Flask如何实现这一点的任何示例。
在存储上传文件到临时文件的示例代码中,我认为你只需要将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 ..
或者,如果你想异步上传到S3,你可以使用Heroku提供的任何队列机制。
import boto
from boto.s3.connection import S3Connection
from boto.s3.key import Key
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
conn = S3Connection('credentials', '')
bucket = conn.create_bucket('bucketname')
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string(file.readlines())
return "Success!"