Google App Engine / Java: blobstore.serve возвращает ошибку сервера 500

У меня есть приложение Java на Google App Engine с сервлетом, который загружает большие изображения из Google Cloud Storage. Этот код действительно работал (например ... вчера) и по какой-то причине больше не будет, но я его не редактировал! При обновлении несколько раз он один раз возвращал примерно половину изображения, которое должен был загружаться, а затем останавливался.

Вот сервлет:

@SuppressWarnings("serial")
public class SomeServlet extends HttpServlet
{
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        BlobstoreService blobstore = BlobstoreServiceFactory.getBlobstoreService();
        String file = req.getParameter("file");
        String folder = req.getParameter("folder");

        BlobKey blobkey = blobstore.createGsBlobKey("/gs/bucket/" + folder + "/" + file + ".jpg");

        blobstore.serve(blobkey, resp);
    }
}

Вот что говорится в журнале без каких-либо предупреждений / ошибок / критических отметок:

2012-07-26 19: 44: 54.635 / servlet? Folder = SomeFolder & file = SomeFile 200 96 мс 0 КБ Mozilla / 5.0 (Windows NT 5.1; rv: 14.0) Gecko / 20100101 Firefox / 14.0.1 [26 июля 2012 г .: 10: 44:54 -0700] «GET / servlet? Folder = SomeFolder & file = SomeFile HTTP / 1.1» 200 334 - «Mozilla / 5.0 (Windows NT 5.1; rv: 14.0) Gecko / 20100101 Firefox / 14.0.1» «myapp.appspot. com "ms = 97 cpu_ms = 103 api_cpu_ms = 33 cpm_usd = 0.002957 instance = 00c61b117cef9993f79be3c568c0cbda0f14

Вот что http://myapp.appspot.com/servlet?folder=SomeFolder&file=SomeFile отображает:

Ошибка: ошибка сервера. Сервер обнаружил ошибку и не смог выполнить ваш запрос. Если проблема не исчезнет, ​​сообщите о ней и укажите это сообщение об ошибке и запрос, который ее вызвал.

Любые идеи?

Спасибо!


person user1394563    schedule 26.07.2012    source источник


Ответы (2)


Я предлагаю следующее, чтобы выяснить точную проблему:

  • Поместите try / catch в свой doGet и в обработчик исключения catch, зарегистрируйте сообщение об ошибке или напишите его на экране.
person Romin    schedule 26.07.2012
comment
Я не могу ничего отследить. Между прочим, во время попытки сервлет сработал случайным образом два раза из десятков вызовов и один раз вернул половину изображения. Я не понимаю, почему! - person user1394563; 27.07.2012

Вы уверены, что у вашего приложения есть доступ к корзине, из которой вы пытаетесь обслуживать файлы? Учетная запись службы из вашего приложения должна иметь как минимум разрешения на чтение для объектов, которые вы пытаетесь обслуживать.

Фактическое обслуживание файла происходит за пределами вашего сервлета, поэтому вы ничего не видите в своих журналах.

person Stuart Langley    schedule 27.07.2012
comment
Да, доступ хороший. Раньше тоже работало! Я не уверен, но мне кажется, что он поступает из хранилища Google, поскольку я пытался получить доступ к файлу напрямую (на мгновение поделившись им публично), и он продолжал возвращать что-то вроде «Изображение не может быть отображено, потому что оно содержит ошибки». . Иногда изображение появлялось случайным образом при обновлении, поэтому я не знаю ... - person user1394563; 27.07.2012