Загрузка файлов через контроллер

347
21 февраля 2017, 17:06

Есть контроллер через который проходят все входящие запросы на сервер. Есть сервлет для загрузки файлов. Пробую напрямую на сервелет загрузки файлов делать обращение - загружает, а если через контроллер то нет.

В контроллере делаю перенаправление на нужный сервлет

rd = context.getRequestDispatcher("/UploadFile");
                    rd.forward(request, response);

но параметр request.getPart("file"); получается null.

почему? как исправить?

Контроллер:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        HttpSession session = request.getSession();
        PrintWriter out = response.getWriter();
        String[] path = request.getPathInfo().replaceFirst("^/+", "").split("/+");
        System.out.println(Arrays.toString(path));
        ServletContext context= getServletContext();
        RequestDispatcher rd = null;
        String action = "";
        for(int i=1;i<path.length;i++) {
            action+="/"+path[i];
        }
        if(session.getAttribute("token") != null && session.getAttribute("token").equals(Sloyev.GetCookieValue("token", request))) {
            request.setAttribute("action", action);
            switch (path[0]){
                case Sloyev.CONTROLLER_USER:
                    rd = context.getRequestDispatcher("/UserController");
                    rd.forward(request, response);
                    break;
                case Sloyev.CONTROLLER_ADMIN:
                    rd = context.getRequestDispatcher("/AdminController");
                    rd.forward(request, response);
                    break;
                case Sloyev.CONTROLLER_UTILS:
                    rd = context.getRequestDispatcher("/UtilsController");
                    rd.forward(request, response);
                    break;
                case Sloyev.CONTROLLER_UPLOAD:
                    rd = context.getRequestDispatcher("/UploadFile");
                    rd.forward(request, response);
                    break;
                default:
                    result.put(Sloyev.TYPE_STATUS, Sloyev.TYPE_ERROR);
                    result.put(Sloyev.TYPE_MESSAGE, "Controller - Unknown action.");
                    out.write(result.toJSONString());
                    break;
            }
        } else {
            result.put(Sloyev.TYPE_STATUS, Sloyev.TYPE_ERROR);
            result.put(Sloyev.TYPE_MESSAGE, "Bad token");
            out.write(result.toJSONString());
        }
    }
READ ALSO
Перелистывание Viewpager с помощью Button

Перелистывание Viewpager с помощью Button

Прошу объяснить как правильно реализовать перелистывание Viewpager с помощью кнопок("предыдущий","следующий"), а не пальцевСпасибо большое!

401
Компилятор javac - статический компилятор?

Компилятор javac - статический компилятор?

Цитата из книги "JavaНовое поколение разработки":

372
Передвижение машины на 10 метров

Передвижение машины на 10 метров

Дан метод move() - изначально он пуст, я его сам заполняю, который перемещает автомобиль на 1 метр вперед или назадПри перемещении вперед он вернет...

315
Overridden method does not throw

Overridden method does not throw

И для метода findAll() получаю следующие: overridden method does not throw javalang

304