Java создание и загрузка файла с помощью AJAX не работает - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь сгенерировать некоторые отчеты и загрузить их как csv file, используя Java Spring MVC Web Application.У меня есть список данных, отображаемых в браузере с возможностью выбора нескольких строк, и я пытаюсь создать CSV-файл с выбранными строками и загрузить CSV-файл.Мой метод контроллера выглядит следующим образом:

public String downloadBusinessAsFile(@ModelAttribute("ids") String selectedIds, HttpServletRequest request, HttpServletResponse response, ModelMap model)
{
    String fileName = new SimpleDateFormat("yyyyMMddHHmmss'.csv'").format(new Date());
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition","attachment;filename="+fileName);
    try 
    {
        Map<String, Obj> sessionBusinesses = (Map<String, Obj>) httpSession.getAttribute("objMap");
        ServletOutputStream out = response.getOutputStream();
        StringBuffer sb = reportService.writeBusinessesToCSV(selectedIds, sessionData);         
        InputStream in = 
                    new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));

        byte[] outputByte = new byte[4096];
        //copy binary contect to output stream
        while(in.read(outputByte, 0, 4096) != -1)
        {
            out.write(outputByte, 0, 4096);
        }
        in.close();
        out.flush();
        out.close();
        httpSession.invalidate();
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    return "success"; 
}

StringBuffer возвращенный объект имеет требуемое значение.Я использую следующие сценарии для вызова метода контроллера:

$(document).on('click', '#add-biz', function(){ 
    var selectedRow = '';
    for (var i = 0; i< $('#datTable tbody tr.selected').length; i++) 
    {
         if (i <= 0) 
         {
             selectedRow+=$('#datTable tbody tr.selected')[i].id;              
         }
        else 
        {
            selectedRow+=','+$('#datTable tbody tr.selected')[i].id;
        }
    }
    var url = $("#addUrl").val();
    $.ajax(
    {
        url : url,
        type: "GET",
        data : {ids: selectedRow},
        dataType : "html",
        success:function(htmlData) 
        {   
            if(htmlData == "error")
            {
                $('#btn-div').html("<p>An error occurred</p>")
            }
            else
            {
                $("#successAlert").show();
            }
            $('#divLoading').hide();
        },
        error: function( xhr, status, errorThrown ) {
            console.log( "Error: " + errorThrown );
            console.log( "Status: " + status );
            console.dir( xhr );
        },
    });
});

Я не получаю никаких ошибок при запуске кода, но не вижу никакой опции загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...