在Google App Engine中提供来自Google云端存储的大文件

时间:2017-01-12 17:35:18

标签: google-app-engine dart google-cloud-storage

在App Engine Flexible Environment中运行dart服务器,提供大于32MB的文件似乎存在限制。

我想要提供的文件有一些要求:

  • 文件大小可以大于32MB
  • 无法公开访问(授权在服务器上完成)

目前,我尝试使用gcloud库从存储桶中读取文件,然后输入request.response。由于例如:HTTP response was too large: 33554744. The limit is: 33554432.

的限制,这失败了

有没有办法从存储中提供更大的文件?关于这个主题的文档很混乱(我认为根本没有dart特定的文档)。我一直在阅读有关Blobstore的内容,但我不确定此解决方案是否适用于飞镖。

1 个答案:

答案 0 :(得分:1)

根据@filiph的建议,您可以使用Google Cloud Storage中的answer

服务器端,我在python中有以下代码:

import time
import base64

from oauth2client.service_account import ServiceAccountCredentials


def create_signed_url(file_location):
    # Get credentials
    creds = ServiceAccountCredentials.from_json_keyfile_name('filename_of_private_key.json')
    client_id = creds.service_account_email

    # Set time limit to two hours from now
    timestamp = time.time() + 2 * 3600

    # Generate signature string
    signature_string = "GET\n\n\n%d\n%s" % (timestamp, file_location)
    signature = creds.sign_blob(signature_string)[1]
    encoded_signature = base64.b64encode(signature)
    encoded_signature = encoded_signature.replace("+", "%2B").replace("/", "%2F")

    # Generate url
    return "https://storage.googleapis.com%s?GoogleAccessId=%s&Expires=%d&&Signature=%s" % (
    file_location, client_id, timestamp, encoded_signature)