Как экспортировать CSV-файл после загрузки файла Excel и манипулирования данными с помощью пост-запроса в ajax java? - PullRequest
0 голосов
/ 14 апреля 2020

Моя проблема: я загружаю файл Excel первым. После прочтения файла и манипулирования данными, мне нужно сгенерировать CSV и экспортировать то же самое по нажатию кнопки отправки.

Ниже мой HTML / javascript код:

<div>Please upload the Excel File</div>
<form method="POST" id="fileUploadForm" enctype="multipart/form-data">
    <input type="file" name="file" /><br/><br/>
    <input type="submit" value="Submit" id = "defaultSubmit" />
</form>

Ниже Ajax Запрос:

$(document).ready(function() {
    $("#defaultSubmit").click(function (event) {
        //stop submit the form, we will post it manually.
          event.preventDefault();
      //    $("#fileupload").click();

          // Get form
          var form = $('#fileUploadForm')[0];

            // Create an FormData object 
          var data = new FormData(form);


             $.ajax({
                 url : "/uploadExcelFiles",
                 type: "POST",
                 enctype: 'multipart/form-data',
                 data: data,
                 processData: false,
                 contentType: false,
                 success : function(data) {
                 },
                 error : function(data) {
                 }
             });
          return false;
        });

Теперь ниже java код:

@RequestMapping("/uploadExcelFiles")
    public void readExcelFile(HttpServletResponse response, @RequestParam("file") MultipartFile uploadedFile) {     

        File file = new File(uploadedFile.getOriginalFilename());
        List<EmployeeData> empData = new ArrayList<>();
        empData = blAttendanceService.readFile(file);
        TreeMap<Object, Object> map = blAttendanceService.calculateWorkingSecondsForEmployeeInDay(empData);

        List<EmployeeChartsModel> list = new LinkedList<>();
        for (Entry<Object, Object> ent : map.entrySet()) {
            EmployeeChartsModel ehd = new EmployeeChartsModel();
            long seconds = (long) ent.getValue();
            double dailyHoursSpent = (double)seconds/3600;
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-YYYY");
            System.out.println("Date::: " + sdf.format((Date)ent.getKey()) + " ::::::Hours:::: " + dailyHoursSpent);
            ehd.setEmployeeDate(sdf.format((Date)ent.getKey()));
            ehd.setDailyHoursSpent(dailyHoursSpent);
            list.add(ehd);
        }
        String filename = "DailyAttendanceRecord.csv";

        response.setContentType("text/csv");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION,
                "attachment; filename=\"" + filename + "\"");

        try {
        StatefulBeanToCsv<EmployeeChartsModel> writer = new StatefulBeanToCsvBuilder<EmployeeChartsModel>(response.getWriter())
                    .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
                    .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
                    .withOrderedResults(false)
                    .build();

            writer.write(list);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
}

EmployeeChartsModel - это класс для модели CSV.

Я не получаю никакой ошибки в коде. Просто файл не экспортируется. Кроме того, если я прочитал файл вручную из своего местоположения и сразу нажал на URL этого метода, файл успешно экспортируется. Но я не могу сделать это с помощью ajax почтового запроса.

Пожалуйста, предложите изменения, чтобы экспортировать CSV-файл, используя этот ajax почтовый запрос.

Я использую Java Spring Boot, Html, Javascript в моем коде.

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