Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Загрузка файла на сервер с параметрами


Автор: GigabyteHlama 12.9.2009, 09:51
Проблема такая, отправялю из формы на hello.jsp страничке файл и параметры к нему впридачу вот так:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<html>
<head>
<title>Hello World Sample</title>
</head>
<body>
<form action="FileUpload" method="post" enctype="multipart/form-data">
<INPUT type="text" name="nomLoad" value="1"/><br>
    <br />
    <input type="file" name="myfile" /><br>
    <input type="submit" />
</form>
<c:out value="${param.nomLoad}" />
</body>
</html>

В сервлете читаю и для проверки параметр nomLoad отправляю обратно в hello.jsp страничьку - ничего не появляется, а файл загружается нормально
Вот сервлет:
Код

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String nomLoad;
        response.setContentType("text/html;charset=Windows-1251");
        request.setCharacterEncoding("Cp1251");
        nomLoad = request.getParameter("nomLoad");
        request.setAttribute("nomLoad", nomLoad);
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart){
            // Create a factory for disk-based file items
            FileItemFactory factory = new DiskFileItemFactory();
            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setFileSizeMax(1024*300);
            ServletContext context=getServletContext();
            String path=context.getRealPath("/");
            // Parse the request
            try {
                List items = upload.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    File f1 = new File(path,"index.csv");
                    item.write(f1);
                }
            } catch (Exception e) {
                throw new ServletException(e);
            }            
        }
        getServletContext().getRequestDispatcher("/hello.jsp").forward(request, response);
    }


Как я понял, сервлет не может прочитать из реквеста параметр numLoad потому-что у формы тип для передачи файлов. Как-то подругому надо
реквест обрабатывать чтобы numLoad вытащить?
P.S. В PHP у меня получалось и файл и параметры посланые из формы прочитать. Но это было в другой жизни smile

Автор: bvfalcon 13.9.2009, 19:39
Почему вы данные формы ищете в прямо в параметрах объекта HttpServletRequest? У вас же не GET-запрос.
Если не ошибаюсь, они у вас идут в виде FileItem-ов, в списке items (это который upload.parseRequest(request)).
Посмотрите на готовый пример работы с Apache FileUpload. Если не ошибаюсь, вы его используете?

Автор: GigabyteHlama 14.9.2009, 11:13
Спасибо bvfalcon!. Разобрался. Надо было мне внимательнее читать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)