Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
Angularjs 无法从后端下载包含outputstream数据的Excel电子表格_Angularjs_Spring Restcontroller - Fatal编程技术网

Angularjs 无法从后端下载包含outputstream数据的Excel电子表格

Angularjs 无法从后端下载包含outputstream数据的Excel电子表格,angularjs,spring-restcontroller,Angularjs,Spring Restcontroller,返回outputStream数据以下载Excel电子表格的REST方法: @RequestMapping(value = "/downloadxls", method = RequestMethod.GET) public @ResponseBody void getRecordsAndExportExcel(@RequestParam("search_param") String students, HttpServletResponse response) { response.se

返回outputStream数据以下载Excel电子表格的REST方法:

@RequestMapping(value = "/downloadxls", method = RequestMethod.GET)
public @ResponseBody void getRecordsAndExportExcel(@RequestParam("search_param") String students, HttpServletResponse response) {
    response.setContentType("application/vnd.ms-excel");

 Workbook hssfWorkbook = exportExcelService.getExcelStudents(students);
        try {
            OutputStream out = response.getOutputStream();
            hssfWorkbook.write(out);
            out.flush();
            out.close();

        } catch (IOException e) {
           logger.error("Error exporting to excel:" + e); 
        }
}
我以字节的形式获取数据,但在Angular中,我试图将其表示为Excel电子表格;但它不会下载。我这样做是为了转换:

var blob = new Blob([result.data],  {type : 'application/vnd.openxmlformats-officedocument.presentationml.presentation;charset=UTF-8'});
         FileSaver.saveAs(blob, "MyData.xls");
请求和响应标头:

Access-Control-Allow-Headers:x-requested-with, content-type
Access-Control-Allow-Methods:GET OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Max-Age:3600
Content-Type:application/vnd.ms-excel;charset=UTF-8
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
X-Application-Context:application:8080
请求头

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ms;q=0.6
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:9000
Referer:http://localhost:9000/

我正在使用Angular从前端进行GET调用,并调用后端将数据下载为Excel电子表格,但它无法将输出流转换为blob/Excel。如何将Excel电子表格显示为下载?

在应用程序中显示Excel工作表的方法是返回要显示的Excel工作表的路径+文件名,然后在新选项卡中使用angular打开链接

在服务班

ExportExcel response = new ExportExcel();
response.setPath(excelPath);
return response;
控制器类

Response response = excelService.generateExcel();
return new ResponseEntity<>(response, HttpStatus.OK);

试试看这是否有效。

你能详细说明一下“它不会下载”吗?您在控制台中有任何错误吗?调用
window.open()
之后会发生什么?可能会重复我没有得到任何window.open的html。我正在接收从后端到ui的字节(如果我尝试在后端编写excel也可以),在ui中我有一个模型窗口,可以单击下载选项(),我正在调用我的JS进行下载。我并没有在控制台中得到任何错误,但若试图显示数据,它将在控制台中显示为字节。请建议我是否需要在HTML和JS中添加任何更改以获取文件。我已尝试使用正在下载的FileSaver,但字节正在写入excel,请建议为什么数据未从字节转换。
if(response.status === 200){
var excelPath = response.data.path;
var win = window.open(excelPath, '_blank');
if (win) {
        //Browser has allowed it to be opened
        win.focus();
} else {
        //Browser has blocked it
        swal(   
            "Error!",   
           'Please allow popups for this website',   
           "error"
        );
    }                        
}