Response对象的OutputStream流write之后,生成的图片或者文件在页面没有显示出来

             看着各位大佬写的博客,质量非常高,很羡慕,人嘛,不分贵贱,博文也一样,大佬们写他们擅长牛逼的一块,那我就把一些开发中小的问题补充上,大佬带高手玩,那么我就带小白玩,言归正传,第一次实在项目中写生成二维码的接口,明明已经生成流写到对象里,为什么偏偏在页面上没有显示出来,第二次在项目写下载模板的接口,也是明明流已经写了。为什么在页面没有任何反应,明明请求状态是200,先说解决方式。那就是调用response对象的flushBuffer()方法,贴一段代码

/**
     * 下载模板
     */
    @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有个buffer,flushBuffer()会强行把Buffer的 内容写到客户端浏览器,这样它想不显示,都不行。约到这种问题直接刷新。不用纠结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码根据生成文件并返回前端预览显示的示例: ```java @RestController public class FileController { @PostMapping(value = "/preview") public ResponseEntity<?> previewFile(@RequestParam("file") MultipartFile file) throws IOException { // 读取文件 InputStream inputStream = file.getInputStream(); // 根据文件生成文件 File tempFile = File.createTempFile("temp", ".pdf"); try (OutputStream outputStream = new FileOutputStream(tempFile)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } // 返回生成文件给前端预览 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_PDF); headers.setContentDisposition(ContentDisposition.builder("inline").filename("preview.pdf").build()); ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(tempFile.toPath())); return new ResponseEntity<>(resource, headers, HttpStatus.OK); } } ``` 在这个示例中,我们使用Spring Boot框架编写了一个RestController,该Controller提供了一个名为previewFile的POST接口,用于接收前端上传的文件,并根据文件生成一个PDF文件,并将生成的PDF文件返回给前端进行预览显示。 在Controller中,我们使用MultipartFile对象来接收前端上传的文件,然后从MultipartFile对象中获取文件,使用File.createTempFile()方法来生成临时文件,再将文件写入到临时文件中,最后将生成的PDF文件以ByteArrayResource的形式返回给前端进行预览显示。在返回响应时,我们设置了Content-Type为application/pdf,Content-Disposition为inline,并将ByteArrayResource作为响应主体返回给前端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值