Response 대상의 OutputStream 흐름 write 이후 생성된 그림이나 파일이 페이지에 나타나지 않습니다
1856 단어 프로젝트 실천에 부딪힌 문제
/**
*
*/
@ApiOperation(value = " ")
@ApiImplicitParam(paramType = "path", dataType = "String", name = "encrypted", value = " ", required = true)
@RequestMapping(value = "/excel/template/{encrypted}", method = RequestMethod.GET)
public void template(@PathVariable String encrypted) {
GoodsSupplierExcelExportTemplateByStoreIdRequest request =
new GoodsSupplierExcelExportTemplateByStoreIdRequest();
request.setStoreId(commonUtil.getStoreId());
String file = goodsSupplierExcelProvider.supplierExportTemplate(request).getContext().getFile();
if(StringUtils.isNotBlank(file)){
try {
String fileName = URLEncoder.encode(" .xls", "UTF-8");
HttpUtil.getResponse().setHeader("Content-Disposition", String.format("attachment;filename=\"%s\";filename*=\"utf-8''%s\"", fileName, fileName));
HttpUtil.getResponse().getOutputStream().write(new BASE64Decoder().decodeBuffer(file));
HttpUtil.getResponse().flushBuffer();
}catch (Exception e){
throw new SbcRuntimeException(CommonErrorCode.FAILED);
}
}
}
요점은flushBuffer ()입니다.response에 버퍼가 있습니다.flushBuffer ()는 버퍼의 내용을 클라이언트 브라우저에 강제로 써서 표시하지 않으려고 해도 안 됩니다.이런 문제는 바로 갱신하기로 약속했다.고민할 필요 없어.