PDA

Просмотр полной версии : Получение изображения на сервере из Вёб-броузера



EcoloRa
18.03.2004, 04:23
Есть html-страница с формой:


<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="admin.Images_update" target="_top" NAME="f1">
<INPUT TYPE="hidden" NAME="image_id" value="111">
[B]Изображение<INPUT TYPE="file" NAME="image1">
<INPUT TYPE="SUBMIT" VALUE="Добавить">
</FORM>

Переданная информация должна обрабатываться сервлетом Images_update:


public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws

javax.servlet.ServletException, java.io.IOException {
PrintWriter pw = response.getWriter();
pw.println(Head.out(CaptionImages));
//прослеживанию сеанс
HttpSession hs = request.getSession(true);
String s = (String) hs.getValue("correct");
if ((s != null) && (s.equals(ValueCorrectSeanse))) {
try {
String contextType = request.getContentType();
boolean uploadFile = contextType != null && contextType.startsWith("multipart");
if (uploadFile) {
com.oreilly.servlet.MultipartRequest mr = new com.oreilly.servlet.MultipartRequest(request,

"c:/temp",1024*1024*1024*3);
...

}
}
catch (Exception E)
{
pw.println(MesageError);
pw.println(E);
}
//конец ифа ниже
}
else {
}
}
Но до ... не доходит, возникает ошибка java.lang.IllegalArgumentException: maxPostSize must be positive
Если задать maxPostSize, например, как 1024*1024*1024, то сервер возвращает более серьезную ошибку, выводя много строк

текста.
В чем проблема?

Bas
18.03.2004, 06:00
com.oreilly.servlet.MultipartRequest mr = new com.oreilly.servlet.MultipartRequest(request,

"c:/temp",1024*1024*1024*3);
...

В чем проблема?
1024*1024*1024*3 = 3 221 225 472, что значительно больше максимально допустимого значения int (java.lang.Integer.MAX_VALUE=2 147 483 647) - здесь проблема.
Что касается более серьезной ошибки, надо смотреть на текст, который она выдает :)

EcoloRa
19.03.2004, 04:18
Передаю последний вариант кода:

Форма:


<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="admin.Images_update" target="_top" NAME="f1">
[B]Изображение<INPUT TYPE="file" NAME="image1">
<INPUT TYPE="SUBMIT" VALUE="Добавить">
</FORM>

Метод сервлета Images_update:


public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
PrintWriter pw = response.getWriter();
pw.println(Head.out(CaptionImages));
//прослеживанию сеанс
HttpSession hs = request.getSession(true);
String s = (String) hs.getValue("correct");
if ((s != null) && (s.equals(ValueCorrectSeanse))) {
try {
String contextType = request.getContentType();
boolean uploadFile = contextType != null && contextType.startsWith("multipart");
if (uploadFile) {
com.oreilly.servlet.MultipartRequest mr = new com.oreilly.servlet.MultipartRequest(request, "c:/temp",1024*1024);
news_id = mr.getParameter("news_id");
...

}
}
catch (Throwable E)
{
pw.println(MesageError);
pw.println(E);
}
//конец ифа ниже
}
else {
}
}

До getParameter("news_id") не доходит, возникает ошибка:
. java.lang.NoClassDefFoundError: javax.servlet.ServletInputStream

Bas
19.03.2004, 06:37
До getParameter("news_id") не доходит, возникает ошибка:
. java.lang.NoClassDefFoundError: javax.servlet.ServletInputStream

Разберись со своим ClassLoader - какие jars у тебя подгружаются, а какие - нет... Класс javax.servlet.ServletInputStream обычно находится в servlet.jar (по крайней мере в Tomcat).
Хотя этого, по идее, не должно быть. В этом же jar находятся и все остальные классы из javax.servlet, на которые никто не ругается, что их не находит...
Можешь по-подробнее описать свой environment?

EcoloRa
19.03.2004, 08:59
Я использую Visual Age for Java.

Bas
20.03.2004, 02:17
Я использую Visual Age for Java.
К сожалению, я не работал в этой среде. Есть ли в ней свой servlet container или ты пользуешься каким-то другим?

Где у тебя находятся твои классы и cos.jar (тот jar, где определены классы из com.oreilly.servlet)? Попробуй положить их рядом с servlet.jar (там, где определены javax.servlet классы) - посмотри, что получится... Мне кажется, проблема уже не в коде, а в конфигурации...

EcoloRa
22.03.2004, 04:07
Всем спасибо за помощь.
Решил проблему кардинально: компилирую классы в Visual Age For Java, а запускаю под servletrunner (JSDK). 100% гарантия, что необходимые мне классы будут найдены, если путь к ним или их пакетам прописан в Windows CLASSPATH.
Плюс к этому появилась возможность сохранять файлы в каталог относительно пути запущенного сервлета (в Visual Age for Java эту проблему не решил).
А время Tomcat еще не пришло. :0)