Страница 1 из 1

Получение файла на сервере из Веб-броузера

Добавлено: 16 июн 2005, 18:08
Ganz
Привет всем.

Имеется следующий рабочий(как утверждает автор :) , хотя... работать-то он работает, только как-то не так как хотелось бы ) код на http://www.onjava.com/lpt/a/745

Так вот. С загрузкой txt файлов проблем нет(пока нет :) ), все интересное начинается когда закачиваешь, например, xls файл: размер с исходником одинаковый, но содержимое отображается некорректно, некоторые поля вообще пропадают. А doc вообще может не открыться .

1. При побайтовом сравнении обнаружил несоответствие по 10 адресам в закачаном файле.
2. Иногда получаю пустой файл, т.е. размер файла =0

Помогите разобраться.

Добавлено: 16 июн 2005, 18:37
Kolinus
Проблема может быть в том что читаешь ты из Стрима, а пишешь в Райтер.
Это плохая практика.
Попробуй переделать все на Стрим или на Райтер.

Добавлено: 16 июн 2005, 18:53
AiK

Добавлено: 16 июн 2005, 19:56
Ganz
ok пишу простой метод пост:

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

protected void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
{
    MultipartRequest mr = new MultipartRequest(request, "c:/uploads");
}
по идее должен сработать, но получаю ошибку 500:

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

javax.servlet.ServletException: com/oreilly/servlet/MultipartRequest
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.jsp1_jsp._jspService(jsp1_jsp.java:61)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)


root cause 

java.lang.NoClassDefFoundError: com/oreilly/servlet/MultipartRequest
	SimpleBean.FileUploadBean.doUpload(FileUploadBean.java:25)
	org.apache.jsp.jsp1_jsp._jspService(jsp1_jsp.java:53)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
и где баг?

Добавлено: 17 июн 2005, 10:08
Ganz
Все ок. Спасибо. Я просто не прописал библиотеку в tomcat.
тема закрыта

Добавлено: 17 июн 2005, 13:12
Ganz
Прийдется еще раз вернуться.

Как мне прочитать имя закачиваемого файла (пусть даже это полный путь к нему)? Метод MultipartRequest.getParameter("filename") возвращает null, а другие поля формы считывает нормально :(

Попытался прочитать с помощью request.getParameter(...) - та же картина. Похоже что этот параметр куда-то исчезает: ведь файл-то закачивается.

Добавлено: 17 июн 2005, 13:42
artcore

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

// 50 мегабайт - ограничение на аплуд
MultipartRequest mp = new MultipartRequest(request, dirName + "/", 50 * 1024 * 1024);

File file = mp.getFile("filename");
if (file == null) {
  throw new IOException("No file");
}
а у java.io.File есть все методы для работы с именем файла

Добавлено: 17 июн 2005, 14:07
Ganz
Благодарю.