Получение изображения на сервере из Вёб-броузера

Модератор: Absurd

Ответить
EcoloRa
Сообщения: 7
Зарегистрирован: 10 мар 2004, 04:08
Откуда: Красноярск

18 мар 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
Сообщения: 21
Зарегистрирован: 10 мар 2004, 21:46

18 мар 2004, 06:00

EcoloRa писал(а):

Код: Выделить всё

com.oreilly.servlet.MultipartRequest mr = new com.oreilly.servlet.MultipartRequest&#40]
В чем проблема?[/quote]
1024*1024*1024*3 = 3 221 225 472, что значительно больше максимально допустимого значения int (java.lang.Integer.MAX_VALUE=2 147 483 647) - здесь проблема. 
Что касается более серьезной ошибки, надо смотреть на текст, который она выдает :)
EcoloRa
Сообщения: 7
Зарегистрирован: 10 мар 2004, 04:08
Откуда: Красноярск

19 мар 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
Сообщения: 21
Зарегистрирован: 10 мар 2004, 21:46

19 мар 2004, 06:37

EcoloRa писал(а):До getParameter("news_id") не доходит, возникает ошибка:
. java.lang.NoClassDefFoundError: javax.servlet.ServletInputStream
Разберись со своим ClassLoader - какие jars у тебя подгружаются, а какие - нет... Класс javax.servlet.ServletInputStream обычно находится в servlet.jar (по крайней мере в Tomcat).
Хотя этого, по идее, не должно быть. В этом же jar находятся и все остальные классы из javax.servlet, на которые никто не ругается, что их не находит...
Можешь по-подробнее описать свой environment?
EcoloRa
Сообщения: 7
Зарегистрирован: 10 мар 2004, 04:08
Откуда: Красноярск

19 мар 2004, 08:59

Я использую Visual Age for Java.
Bas
Сообщения: 21
Зарегистрирован: 10 мар 2004, 21:46

20 мар 2004, 02:17

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

Где у тебя находятся твои классы и cos.jar (тот jar, где определены классы из com.oreilly.servlet)? Попробуй положить их рядом с servlet.jar (там, где определены javax.servlet классы) - посмотри, что получится... Мне кажется, проблема уже не в коде, а в конфигурации...
EcoloRa
Сообщения: 7
Зарегистрирован: 10 мар 2004, 04:08
Откуда: Красноярск

22 мар 2004, 04:07

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