服务端代码:
public ResponseEntity exportsequence(@PathVariable String modelname) throws IOException {
XSSFWorkbook wb = constructExportData(modelname);
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
InputStreamResource resource = new InputStreamResource(os.toInputStream());
os.close();
return ResponseEntity.ok().contentType(MediaType.valueOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")).body(resource);
}
/**
*
*
* @param modelName
*/
private XSSFWorkbook constructExportData(String modelName) {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet(ExcelFileHandlerUtil.SEQUENCE_SHEET_FC);
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue(ExcelFileHandlerUtil.MODEL_STRING);
return wb;
}
客户端代码:
return this.http.get(`${this.resourceUrl}/exportsequence/${modelName}`);
用这个下载的时候二进制内容都是正确的,可是打开文件老报错,打不开。
原来要在请求上加一个 responseType
修改代码如下:
const requestOptions = {
responseType: ResponseContentType.Blob
};
return this.http.get(`${this.resourceUrl}/exportsequence/${modelName}`, requestOptions);
记得加:
import {Http, Response,ResponseContentType } from '@angular/http';