【问题标题】:Accessing user files in GAE from javascript从 javascript 访问 GAE 中的用户文件
【发布时间】:2021-02-08 07:32:45
【问题描述】:

我是 GAE 的新手,所以很难理解一些事情。

我正在尝试构建一个 python 网络应用程序来处理用户上传的视频(通过网络应用程序),并在处理完成后显示一些可视化效果(使用 d3-js 构建)。处理期间创建的工件保存在本地,然后上传到用户特定的 GCS 存储桶(它们不可公开访问)。

我希望能够在用户请求时显示可视化(使用已处理的视频工件)。据我了解,由于这些是动态生成的,因此我无法将工件存储在静态文件夹中以供 javascript 访问。因此,看来我必须将处理后的视频工件保存在 /tmp 文件夹中。

如何确保 javascript 能够从这个外部 /tmp 文件夹中获取文件? 或者有没有更好的方法使用 GCS 本身来做到这一点,我如何从 javascript 访问存储桶而不将它们公开?

请提出一些资源或想法来解决这个问题。谢谢!

【问题讨论】:

    标签: javascript google-app-engine


    【解决方案1】:

    我觉得你搞反了。

    您有一个私有存储桶,这对安全性很有帮助。为了让客户端 javascript(浏览器、移动应用程序)下载对象,您需要:

    1. 为您的 python GAE 提供一个 HTTP 处理程序,该处理程序从 GCS 检索文件并将其发送到客户端。 (烧瓶伪代码)
    @app.route('/private/<name>')
    def hello_name(name):
        ## if user is not authorized 
        #### return 401.
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(name)
        bts = blob.download_as_bytes()
        return bts
    
    1. 直接给客户Signed URL from GCS so they can download文件。
    @app.route('/private/<name>')
    def hello_name(name):
        ## if user is not authorized 
        #### return 401.
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(name)
        url = blob.generate_signed_url(
            version="v4",
            # This URL is valid for 15 minutes
            expiration=datetime.timedelta(minutes=15),
            # Allow GET requests using this URL.
            method="GET",
        )
        return url
    

    请注意,在第二种情况下,javascript 文件需要先访问/prvite/your_file_name 以检索签名的 url,然后需要使用签名的 url 从 GCS 下载实际文件。

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多