GCS - 上传较大文件时出现堆错误

GCS - Heap Error When File of higher size was uploaded

我想上传 400MB 的文件到 Google 云存储。以下是我用来上传 url 和在 angularjs

中发布的代码片段
Java Servlet:

UploadOptions opts = UploadOptions.Builder
        .withGoogleStorageBucketName(GCS_BUCKET_NAME);
String url = blobstore.createUploadUrl("/upload", opts);

AngularJS:

$scope.formData.append('file', $scope.filename);

$http.post(uploadUrl, $scope.formData, {
    withCredentials: true,
    headers: {
        'Content-Type': undefined
    },
    transformRequest: angular.identity
})

代码在文件大小为 100-150MB 左右之前工作正常,当文件大小更大时,我在浏览器控制台中收到以下错误。

Failed to load resource: the server responded with a status of 500 (Java heap space)

我需要做什么来避免这个错误?

正如你在回答我上面的问题时所说,这只发生在开发中,而不是生产中。我的猜测是 google 的 blobstore 代码将整个请求读入他们开发服务器的内存中,但这很难说,因为我们无权访问该代码。如果您需要在开发中测试更大的上传,您可以尝试配置您的开发服务器以使用更多内存启动。看起来我使用 -Xmx512M(在 eclipse 启动配置的 "VM arguments" 部分),您甚至可以尝试更多。或者,如果它在开发中不重要,您可以只测试较小的上传并相信较大的上传会在生产中工作。 :)

仅供参考,如果您决定启动具有更多内存的开发服务器:在我的例子中,同时使用 Eclipse 和 Maven,我必须创建 Maven 自动生成的启动配置的副本并修改该副本,否则 Maven 会覆盖我的更改。这也意味着我必须不时手动更新我的副本,例如在更新 appengine SDK 时(以反映新版本号)。