как записать .xlsx-файл в CoyoteOutputStream, файл ошибки поврежден?

Я пытаюсь передать .xlsx-файл, который обрабатывается с помощью apache Poi (v.3.13 - установлен на удаленном сервере, не разрешено его изменять), во внешний интерфейс vue.js. Я все время получаю сообщение об ошибке: «Невозможно открыть файл, неправильное расширение файла или файл поврежден». Я думаю, что расширение файла должно быть правильным (это xlsx-файл, я использую XSSFWorkbook) и т. Д. Кто-нибудь знает, в чем может быть ошибка? Спасибо заранее!

        XSSFWorkbook workbook = WorkbookFactory.create(xlsxFile);
  
 // XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream)
  XSSFSheet sheet = workbook.getSheetAt(0)
  
 Log.debug("Sheet ${sheet}")

  if(json) {

   def count = 1

    XSSFRow row = null// row, die für jedes json neu kreiert wird

def cellA = null

    json.each {

      row = sheet.getRow(count)
     
      
       Log.debug("Row ${row}")

         cellA = row.getCell(0)
         cellA.setCellValue("testvalue")
          Log.debug("Cell ${cellA}") 

    /*  (...)
      } */


      count++
    }
  }


 
    /** Gib Excel file an browser zurück **/
action.sendJSPOutput(false)

    def sdf = new SimpleDateFormat("yyyy-MM-dd");
    def fileName = "ExportSubventionen.xlsx"

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
      workbook.write(bos);
       
    } finally {
    //  bos.close();
    }
    byte[] bArray

    bArray = bos.toByteArray();
    InputStream inputStream = new ByteArrayInputStream((byte[]) bArray, 0, bArray.size())
         
    
    workbook.close()

        byte[] bArray

    bArray = bos.toByteArray();
        bos.close();
    action.originalResponse.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    action.originalResponse.setHeader("Content-Disposition", "attachment; filename=\"$fileName\"")
    action.originalResponse.setHeader("Content-Length", String.valueOf(bArray.length))

    OutputStream os = action.originalResponse.getOutputStream()
    os.write(inputStream.bytes)
    os.flush()
    os.close()

    return

вот мой код внешнего интерфейса:

            if (this.selectedObjects.length > 0) {
        let json = [];
        let date = new Date();
        json.push(...this.selectedObjects);

        Api.post("subvention/excelexport/", json, { respnseType: "blob" })
          .then((response) => {
            let excelFile = new Blob([response.data], {
              type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            });
            FileDownload(excelFile, "Subventionen.xlsx");
            this.loading = false;
          })
          .catch((error) => {

Спасибо заранее!

0 ответов

Другие вопросы по тегам