Я хочу загрузить размер файла 400 МБ в Google Cloud Storage. Ниже приведен фрагмент кода, который я использую для загрузки 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-150 МБ, когда размер файла выше, я получил следующую ошибку в консоли браузера.
Failed to load resource: the server responded with a status of 500 (Java heap space)
Что мне нужно сделать, чтобы избежать этой ошибки?
Как вы сказали в своем ответе на мой вопрос выше, это происходит только в развитии, а не в производстве. Я предполагаю, что код Google blobstore считывает весь запрос в память на своем сервере разработки, но это трудно сказать, потому что у нас нет доступа к этому коду. Если вам нужно протестировать большие загрузки в dev, вы можете попробовать настроить ваш сервер-dev для запуска с большим объемом памяти. Похоже, я использую -Xmx512M
(в разделе " -Xmx512M
VM" конфигурации запуска в eclipse), вы даже можете попробовать еще. Или, если это не важно в dev, вы можете просто протестировать меньшие закачки и надеяться, что крупные будут работать на производстве. :)
FYI, если вы решили запустить dev-сервер с большим объемом памяти: в моем случае, используя Eclipse и Maven вместе, мне пришлось создать копию конфигурации запуска, которую Maven автоматически сгенерировал, и изменить ее, иначе Maven перезапишет мои изменения. Это также означает, что я должен периодически обновлять свою копию вручную, например, при обновлении SDK appengine (чтобы отразить номер новой версии).