Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从servlet响应下载JavaScript格式的Excel_Javascript_Java_Excel_Spring_Apache Poi - Fatal编程技术网

从servlet响应下载JavaScript格式的Excel

从servlet响应下载JavaScript格式的Excel,javascript,java,excel,spring,apache-poi,Javascript,Java,Excel,Spring,Apache Poi,我在其他地方看到过许多类似的问题,但都未能解决这个问题 我想使用ApachePOI(3.17)在我的应用程序中下载一个Excel文档。我在Spring服务中生成文档,然后将其作为响应传递回要下载的JavaScript客户端。但是,文件已损坏,因为“文件格式或文件扩展名无效” 春季服务: final Workbook workbook = new XSSFWorkbook(); final Sheet sheet = workbook.createSheet("Test"); Row row =

我在其他地方看到过许多类似的问题,但都未能解决这个问题

我想使用ApachePOI(3.17)在我的应用程序中下载一个Excel文档。我在Spring服务中生成文档,然后将其作为响应传递回要下载的JavaScript客户端。但是,文件已损坏,因为“文件格式或文件扩展名无效”

春季服务:

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();
Servlet:

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();

我哪里出问题了?

好吧,事实上我知道了。我找到了解决问题的解决方案:

我需要在servlet中将文件编码为字符串,然后将其传递给客户机并解码为Blob