получение поврежденного файла при попытке загрузить excel (.xlsx) при отправке файла с сервера на клиент - PullRequest
0 голосов
/ 25 июня 2019

Моя цель - отправить клиенту файл Excel (.xlsx) и загрузить файл Excel. Ниже приведен мой код на стороне сервера, который возвращает ResponseEntity.

@PostMapping(value = "/proccessFile") 
    public ResponseEntity<Resource> processFileAndDownload(@RequestBody String sheetName) throws FileNotFoundException, IOException
    {
        try
        {
        //some logic applied to the file CollibraOutputTemplateDataAttrName and the file is a saved in a tmp folder
        collibraAutomationScript.processingFiles(sheetName);

        //preparing CollibraOutputTemplateDataAttrName.xlsx for download
            File file=new File("tmp/CollibraOutputTemplateDataAttrName.xlsx");  
            Path path = Paths.get(file.getAbsolutePath());          
            byte[] data = Files.readAllBytes(path);

             ByteArrayResource resource = new ByteArrayResource(data);
             HttpHeaders headers = new HttpHeaders(); 
             headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+ file.getName());
                        return ResponseEntity.ok()
                        .headers(headers)
                        .contentLength(file.length())
                        .contentType(MediaType.parseMediaType("application/octet-stream"))
                        .body(resource);                 

        }catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }

Код Ajax ниже:

$.ajax({
    type: "POST",
    enctype: 'application/json',
    url: 'http://localhost:8080/proccessFile',
    data: nameOfSheet,
    processData: false,
    contentType: false,
    success: function (response) {
      var data = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
      var link=document.createElement('a');
      link.href = window.URL.createObjectURL(data);
      link.download='CollibraOutputTemplateDataAttrName.xlsx'
      link.click();
    },
    error: function (error) {
      console.log(error);
      // process error
    }
  });

Файл загружается, но когда я пытаюсь его открыть, он сообщает, что «Рабочая книга не может быть открыта или отремонтирована в Microsoft Excel, потому что она повреждена». Я пробовал различные решения, представленные в stackoverflow, обновляя эту проблему, но ничего не помогло. В этом же коде я даю тип: 'text / plain' и отправляю текстовый файл с сервера, он работает отлично, загруженный текстовый файл не поврежден. Не понимаете, в чем проблема с файлами Excel?

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