【问题标题】:App Engine Fails to Download Greater Than 33MBApp Engine 无法下载超过 33MB 的文件
【发布时间】:2018-11-01 16:32:20
【问题描述】:

下面的代码直接来自google apis github,用于从 GCS 下载文件。我将其更改为能够将文件下载到本地计算机。

如果文件大于 33MB,应用将在 2 分钟或更短时间后停止尝试。我想我读到应用引擎的限制是 32 或 33。不过,我看不到任何配额增加。有人可以为我指出如何管理这个问题的正确方向吗?

    if (blob.getSize() < 1_000_000) {
        // Blob is small read all its content in one request
        byte[] content = blob.getContent();
        outStream.write(content);
        outStream.close();
    } else {
        // When Blob size is big or unknown use the blob's channel reader.
        try (ReadChannel reader = blob.reader()) {
            WritableByteChannel channel = Channels.newChannel(outStream);
            ByteBuffer bytes = ByteBuffer.allocate(64 * 1024);
            while (reader.read(bytes) > 0) {
                bytes.flip();
                channel.write(bytes);
                bytes.clear();
            }
        }
    }

【问题讨论】:

  • 更新了 try 块,尽管它必须下载到 GCS 而不是本地机器。 java.io.FileNotFoundException

标签: java google-app-engine download google-cloud-storage


【解决方案1】:

App Engine 的最大文件大小为 32 MB(Golang 环境为 64 MB 除外)。您无法从 Google Cloud Storage(或任何来源)下载大于此大小的文件。部署应用程序时,您也不能在部署中包含大于 32 MB 的文件。这记录在here。查找标题为Static data limit的段落

【讨论】:

  • 谢谢约翰。我读过 Blobstore API 可以将限制提高到 2GB。或者,看起来可以直接从 GCS 存储桶提供公共 URL?现在正在寻找这个答案。如果我能找到它会再次发布。
  • 是的,您可以直接从 Google Cloud Storage 提供网址。这将需要公共访问或签名的 url。
  • 是的!这行得通,谢谢。我只需要确保这些链接只对正确的用户可用。如果我将用户重定向到一个 URL,他们是否以用户身份而不是通过 GAE 的 gservice 帐户访问该对象? response.sendRedirect("google.com");
【解决方案2】:

将客户端发送到直接链接。直接链接没有限制。通过在 GCP 中设置正确的 ACL 和/或权限,确保客户端可以访问该链接。请注意链接的安全性,不要向公众开放。

response.sendRedirect("google.com");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2014-08-02
    • 2011-11-11
    • 2018-01-12
    相关资源
    最近更新 更多