Есть простая задача — средствами HTML form загрузить картинку и с помощью jsp отобразить её.
Делаю так:
Страничка № 1 с формой:
<html>
<head>
<title>upload</title>
</head>
<body>
<h1>upload</h1>
<form action="uploadPhotoSQL.jsp" method="post" enctype="multipart/form-data">
<input type=file name=ufile>
<input type=submit value="Attach">
</form>
</body>
</html>
Страница uploadPhotoSQL.jsp, обрабатывающая переданные данные:
<%@ page import="javax.servlet.*,javax.servlet.http.*,java.io.*" %>
<html>
<head>
<title>result</title>
</head>
<body>
<h1>result</h1>
<%
ServletOutputStream outs = response.getOutputStream();
response.setContentType("image/jpeg");
InputStream is = request.getInputStream();
int[] data = new int[request.getContentLength()];
int bytes;
int counter = 0;
while((bytes=is.read())!=-1)
{
data[counter]=bytes;
counter++;
}
is.close();
for(int i=0; i<data.length;i++){
outs.write(data[i]);
}
outs.flush();
outs.close();
%>
</body>
</html>
Проблема в том, что даже при самом первом вызове "is.read()" возвращается "-1", то есть получается, что данных на входе нет. Хотя "request.getContentLength()" при этом возвращает правильный размер картинки. Не могу понять, в чем дело.
P.S.: при использовании похожего кода в сервлетах всё работает
Подсказали, как решить эту проблему. Дело оказалось не в коде, а в наличии upload-фильтра в web.xml в tomcat'е. Удалил его и все заработало.
PS: приведенный выше код по обработке потока не совсем полный, поэтому при его полном копировании не уверен в его работоспособности. Но главное, что входной поток начал читаться.