как записать .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) => {
Спасибо заранее!