我一直在努力寻找如何从App Engine存储桶(或任何私有存储桶)中获取图像并将其显示在运行于GCP App Engine上的Flask网站上的方法。
我正在尝试以下变化:
@app.route('/get_object/<object>')
def get_object(object):
client = storage.Client()
bucket = client.get_bucket('bucket-id')
blob = bucket.get_blob(object)
return blob
我的HTML看起来像这样:
<img src={{ url_for('get_object', object='test.jpg') }}>
在我的App Engine默认存储桶中,我坐在一张名为test.jpg
的照片上,但似乎没有任何效果。我的存储桶必须是私有的,反正还有可以提供私有文件的文件吗?
答案 0 :(得分:1)
我这样做了:
我的图片src使用python函数传递存储桶和对象
<img src="{{ url_for('get_file', bucket='testBucket', object='image.png') }}">
这是功能
@app.route('/get_file/<testBucket>/<object>')
@requires_auth
def get_file(testBucket, object):
storage_client = storage.Client()
bucket = storage_client.get_bucket(testBucket)
blob = bucket.blob(object)
with tempfile.TemporaryDirectory() as tmpdirname:
fullpath = os.path.join(tmpdirname, object)
blob.download_to_filename(fullpath)
return send_from_directory(tmpdirname, object)
这会将App Engine应用程序本地的文件保存在一个临时目录中,该函数一旦返回就存在,该目录将被删除,因此用户可以获取文件,但临时位置不再存在。我认为...