上载更高大小的文件时GCS - 堆错误

时间:2016-07-13 06:37:41

标签: java angularjs google-cloud-storage google-cloud-platform

我想将400MB的文件大小上传到Google云端存储。以下是我用来获取上传网址和在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)

我需要做些什么才能避免此错误?

1 个答案:

答案 0 :(得分:1)

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

如果您决定启动具有更多内存的开发服务器:仅在我的情况下,一起使用Eclipse和Maven,我必须创建Maven自动生成的启动配置的副本并修改它,否则Maven会覆盖我的变化。这也意味着我必须手动更新我的副本,例如更新appengine SDK(以反映新的版本号)。