簡體   English   中英

從 servlet 響應下載 JavaScript 中的 Excel

[英]Download Excel in JavaScript from servlet response

我在其他地方看到了許多類似的問題,但無法解決這個問題。

我想使用 Apache POI (3.17) 在我的應用程序中下載 Excel 文檔。 我在 Spring 服務中生成文檔,然后將此作為響應傳遞回 JavaScript 客戶端以進行下載。 但是,文件已損壞,因為“文件格式或文件擴展名無效”。

Spring 服務:

final Workbook workbook = new XSSFWorkbook();
final Sheet sheet = workbook.createSheet("Test");

Row row = sheet.getRow(1);
if (row == null)
{
    row = sheet.createRow(1);
}

Cell cell = row.getCell(0);
if (cell == null)
{
    cell = row.createCell(0);
}

cell.setCellValue("Testing123");

final ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
workbook.write(outByteStream);
outArray = outByteStream.toByteArray();
outByteStream.flush();
outByteStream.close();
workbook.close();

小服務程序:

final ByteArrayResource resource = new ByteArrayResource(
                this.downloadService.downloadExcel(request, response, baseRequest));

final HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + resource.getFilename());

return ResponseEntity.ok()
        .headers(headers)
        .contentLength(resource.contentLength())
        .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
        .body(resource);

JavaScript 客戶端:

var contentTypeHeader = 'application/vnd.ms-excel';
var blob = new Blob([result],{type: contentTypeHeader});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();

我哪里錯了?

好吧,我確實想通了。 我找到了解決問題的解決方案:

使用 java/javascript 和 apache POI 導出.xls 文件時獲取損壞的文件

我需要在我的 servlet 中將文件編碼為字符串,然后將其傳遞給客戶端並解碼為 Blob。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM