У меня есть этот сервлет, который я вызываю с помощью 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