HTML-код страницы, записанный в файл при загрузке файла из веб-приложения - PullRequest
0 голосов
/ 01 октября 2018

У меня есть код сервлета downloadfile, который будет динамически добавлять содержимое в файл csv для загрузки пользователями.Однако вместо того, чтобы содержимое, которое я хочу добавить в файл CSV, вместо этого в файле появляется HTML-код страницы.Кто-нибудь может сказать мне, что вызывает эту ошибку?Вот мой код контроллера

    response.setContentType("text/csv");
    response.setHeader("Content-Disposition", "attachment"; 
    filename="\\evaluations.csv\\");

    try
    {
        OutputStream outputStream = response.getOutputStream();
        String outputResult = "xxxx, yyyy, zzzz, aaaa, bbbb, ccccc, dddd, eeee, ffff, gggg\n";
        outputStream.write(outputResult.getBytes());
        outputStream.flush();
        outputStream.close();
    } catch(Exception e) {
        status = "Error exporting file, please try again later";
        System.out.println(e.toString());
    }

    //request.setAttribute("status",status);
    //dispatcher = request.getRequestDispatcher("/viewEvaluations.jsp");
    //dispatcher.forward(request, response);

РЕДАКТИРОВАТЬ:

Удаление запроса пересылки фактически останавливает копирование кода HTML в файл, и я также осознал его избыточность и закомментировал их.Это был код, который вызывал проблему.

1 Ответ

0 голосов
/ 01 октября 2018

Ну, если вы просто хотите перезагрузить текущую страницу, вы можете сделать трюк:

Ваш тег <a> должен выглядеть следующим образом:

<a href="javascript:void(0)" id="test">Click Here</a>

В Jquery:

$('#test').click(function() 
{   
    location.href='download'; //your download request mapping
    setTimeout(function(){location.reload()},2000); //this will reload the current page after 2 seconds.
});

Ваш код контроллера будет:

@RequestMapping(value = "download", method = RequestMethod.GET)
    public void download(Locale locale, Model model,HttpServletRequest request,HttpServletResponse response,HttpSession session) {
        response.setContentType("text/csv");
        response.setHeader("Content-disposition", "attachment; filename=evaluations.csv");

        try
        {
            OutputStream outputStream = response.getOutputStream();
            String outputResult = "xxxx, yyyy, zzzz, aaaa, bbbb, ccccc, dddd, eeee, ffff, gggg\n";
            outputStream.write(outputResult.getBytes());
            outputStream.flush();
            outputStream.close();
        } catch(Exception e) {

           //logging
        }
    }

Если вы хотите сделать видимым div, который скрыт при загрузке страницы, тогда вместо вызова location.reload() вы должны вызвать $('#divId').show()

...