Вызов сервлета зависает при использовании S3 Java SDK - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть этот сервлет, который я вызываю с помощью GWT FileUpload (я не думаю, что это так важно, что это GWT):

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    try {
        User user = ServerUtil.validateUser(request);
        ServletFileUpload upload = new ServletFileUpload();

        try {
            FileItemIterator iter = upload.getItemIterator(request);

            while (iter.hasNext()) {
                FileItemStream item = iter.next();

                String saveFile = item.getName();
                InputStream stream = item.openStream();

                // Process the input stream
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                int len;
                byte[] buffer = new byte[8192];
                while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
                    out.write(buffer, 0, len);
                }

                int maxFileSize = 10 * (1024 * 1024); //10 megs max 
                if (out.size() > maxFileSize) { 
                    throw new RuntimeException("File is > than " + maxFileSize);
                }

                // save file data
                String fileName = user.getUsername() + "_" + new Date().getTime() + "_" + saveFile;
                // store to S3
                String imageUrl = S3PhotoUtil.storeThumbnailImage(out.toByteArray(), fileName, 100);
                // return the url of the file
                writer.println(imageUrl);
                response.flushBuffer();
                return;
            }
        } catch (RuntimeException e) {
            writer.println(("error=" + e.getMessage()).getBytes());
        } catch (FileUploadException e) {
            writer.println(("error=Could not read file").getBytes());
        } catch(IOException e) {
            writer.println(("error=Image type not supported!").getBytes());
        }
    } catch (EIException e) {
        e.printStackTrace();
        writer.println(("error=Not logged in").getBytes());
    }
}

Когда вызывается зависание POST, я проверяю firebug, похоже, он никогда не получает ответ. Если я отлаживаю, я вижу, что все инструкции выполняются без проблем, и метод выполняется нормально. Файлы хранятся в моем S3 ведре. Теперь, если я удаляю вызов, связанный с хранилищем S3, он перестает зависать, хотя, очевидно, он больше ничего не делает ... Мой вывод состоит в том, что в этом хранилище S3 есть что-то, что мешает моему сервлету. Сам код взят из примера приложения журнала путешествий @ http://aws.amazon.com/code/1264287584622066 Он говорит, что нуждается в коте, и я использую причал ... это может быть проблемой?

Спасибо

Thomas

...