【发布时间】:2019-11-27 19:45:08
【问题描述】:
我有一个 Flask 应用程序,用户可以在其中上传图像,图像保存在文件系统的静态文件夹中。 目前,我正在使用 Google App Engine 进行托管,发现无法保存到标准环境中的静态文件夹。这是代码
def save_picture(form_picture,name):
picture_fn = name + '.jpg'
picture_path = os.path.join(app.instance_path, 'static/image/'+ picture_fn)
output_size = (1000,1000)
i = Image.open(form_picture)
i.thumbnail(output_size)
i.save(picture_path)
return picture_path
@app.route('/image/add', methods=['GET', 'POST'])
def addimage():
form = Form()
if form.validate_on_submit():
name = 'randomname'
try:
picture_file = save_picture(form.image.data,name)
return redirect(url_for('addimage'))
except:
flash("unsuccess")
return redirect(url_for('addimage'))
我的问题是,如果我从标准环境更改为弹性环境,是否可以保存到静态文件夹?如果不是,我应该考虑哪些其他托管选项?你有什么建议吗?
提前致谢。
听从您的建议,我将改用 Cloud Storage。我想知道我应该从upload_from_file()、upload_from_filename() 或upload_from_string() 使用什么。 source_file 从flask-wtform 的form.photo.data 中获取数据。我还没有成功保存在云存储上。这是我的代码:
def upload_blob(bucket_name, source_file, destination_blob_name):
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file)
return destination_blob_name
@app.route('/image/add', methods=['GET', 'POST'])
def addimage():
form = Form()
if form.validate_on_submit():
name = 'randomname'
try:
filename = 'foldername/'+ name + '.jpg'
picture_file = upload_blob('mybucketname', form.photo.data, filename)
return redirect(url_for('addimage'))
except:
flash("unsuccess")
return redirect(url_for('addimage'))
我已通过更改 save_picture 功能成功地将文件保存在谷歌云存储上,以防万一将来有人遇到此问题:
app.config['BUCKET'] = 'yourbucket'
app.config['UPLOAD_FOLDER'] = '/tmp'
def save_picture(form_picture,name):
picture_fn = secure_filename(name + '.jpg')
picture_path = os.path.join(app.config['UPLOAD_FOLDER'], picture_fn)
output_size = (1000,1000)
i = Image.open(form_picture)
i.thumbnail(output_size)
i.save(picture_path)
storage_client = storage.Client()
bucket = storage_client.get_bucket(app.config['BUCKET'])
blob = bucket.blob('static/image/'+ picture_fn)
blob.upload_from_filename(picture_path)
return picture_path
【问题讨论】:
标签: google-app-engine flask python-3.7 cloud-hosting