当前位置: 首页 > 知识库问答 >
问题:

如何使用python flask提供来自google云存储的图像

赵智
2023-03-14

我目前正在一个在Appengine标准环境下运行flask的项目中工作,我试图提供一个已经上传到我项目默认Appengine存储桶中的Google云存储的图像。

这是我目前拥有的路由代码:

# main.py

from google.appengine.api import images
from flask import Flask, send_file

app = Flask(__name__)

...

@app.route("/sample_route")
def sample_handler():
    myphoto = images.Image(filename="/gs/myappname.appspot.com/mysamplefolder/photo.jpg")
    return send_file(myphoto)
...

实际上,我试图提供一个图像,我已经上传到我的app engine项目中的默认云存储桶中。

我还尝试使用以下代码为映像提供服务,但没有成功:

# main.py

from google.appengine.api import images
from flask import Flask, send_file

app = Flask(__name__)

...

@app.route("/sample_route")
def sample_handler():
    import cloudstorage as gcs
    gcs_file = gcs.open("/mybucketname/mysamplefolder/photo.jpg")
    img = gcs_file.read()
    gcs_file.close()

    return send_file(img, mimetype='image/jpeg')
...

共有1个答案

唐麒
2023-03-14

我使用了GoogleAppenGineCloudStorageClientPython库,并用类似以下示例的代码加载了图像:

from google.appengine.api import app_identity
import cloudstorage
from flask import Flask, send_file
import io, os

app = Flask(__name__)

# ...

@app.route('/imagetest')
def test_image():

  # Use BUCKET_NAME or the project default bucket.
  BUCKET_NAME = '/' + os.environ.get('MY_BUCKET_NAME',
                                     app_identity.get_default_gcs_bucket_name())
  filename = 'mytestimage.jpg'
  file = os.path.join(BUCKET_NAME, filename)

  gcs_file = cloudstorage.open(file)
  contents = gcs_file.read()
  gcs_file.close()

  return send_file(io.BytesIO(contents),
                   mimetype='image/jpeg')
 类似资料:
  • 这是可行的,但这里的问题是,在流回此方法的客户端之前,它必须首先缓冲所有字节。这会导致很多延迟,尤其是当存储在GCS中的文件很大时。 是否有一种方法可以从GCS获取文件并将其直接流到OutputStream,这里的OutputStream是针对servlet的。

  • 我有一个存储图像的存储桶,当我使用图像的公共URL检索图像时,它会在浏览器中下载图像,而不是在浏览器中显示图像,我如何查看图像而不是下载图像。我为上传的图片使用以下URL。 https://www.googleapis.com/download/storage/v1/b/image-downloader-bucket/o/a06266f6-6082-468e-92ca-f918a48533a8?g

  • 我试图从云存储桶中为我的django应用程序提供静态文件,但不知道确切的过程。有人能建议一个合适的方法吗? 我所做的步骤: 使用gsutil命令上传了Google云存储桶(www.example.com)上的所有静态文件。 编辑文件。 文件内容: settings.py文件: 关于这项任务需要哪些额外的更改,有什么建议吗?

  • 在负载均衡器、桶或云CDN中都没有这样的选项。 如何使用此配置服务如此深入的链接?

  • 是否可以使用来自Google API客户端Javascript库的承载令牌来授权Google云存储桶,而无需向用户请求https://www.googleapis.com/auth/devstorage范围。该桶具有对所有Google帐户的读写访问权限。