20141218_输出PDF错误之byte[]

本文讨论了在浏览器端请求打开后台PDF文件时,Java后台处理请求的方法导致PDF缓冲到客户端不完整的问题,并提供了将缓存大小从8K调整为1K的解决方案,以避免显示问题和另存为异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

问题描述:当浏览器端使用Active控件如(AIP、iwebPDF)请求打开后台PDF文件时,Java后台处理请求的方法处理如下:

 

response.setCharacterEncoding("UTF-8");

      String filePath = request.getParameter("fileName");

      File file = new File(filePath);  

      try {

         if (!file.exists()) {         

            response.sendError(404, "文件没有找到!");         

            return null;

         }  

         FileInputStream in = new FileInputStream(file);

         OutputStream out = response.getOutputStream();

         byte[] b = new byte[1024 * 8];

         while ((in.read(b)) != -1) {

            out.write(b);

         }

         out.flush();

         in.close();

         out.close();

      } catch (IOException e) {

         e.printStackTrace();

      }    

      return null;

前台传了文件在服务器的全路径,存数据库也是存全路径。

红色字体行,从内存申请8K字节内存作为缓存,把文件流转成文件流响应输出到客户端,问题很容易出现PDF缓冲到客户端不完整,表现为显示有问题,另存为处理后的文件异常,打开关闭后提示“是否保存修改…”

 

解决办法是把8K改成1K,即1024问题就没在出现。

 

原因分析:还没找到!!!

 

 

其他解决方案:

int len = 0; // 字节长度

while((len = in.read(b))>0){ // 将读取到的长度记录下来

  out.write(b,0,len); // 读取了多长的字节就写入多长的字节

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值