Springboot 以输出流形式 在线预览PDF 文件分存储 (本地/远程)

原因:本来是前端直接用url 显示pdf、但是url 容易暴露。

后来使用后台返回文件流的形式输出、前端显示、不多说直接上代码

1、文件存在服务器本地

@RequestMapping(value = "/preview", method = RequestMethod.GET)
public void pdfStreamHandler(HttpServletRequest request, HttpServletResponse response) {
	//PDF文件地址
	File file = new File("D:\\123.pdf");
	if (file.exists()) {
		byte[] data = null;
		FileInputStream input=null;
		try {
			input= new FileInputStream(file);
			data = new byte[input.available()];
			input.read(data);
			response.getOutputStream().write(data);
		} catch (Exception e) {
			System.out.println("pdf文件处理异常:" + e);
		}finally{
			try {
				if(input!=null){
					input.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

2、文件存在远程通过url 可以直接打开的那种

@GetMapping("getPdfView")
@ApiOperation(value = "PDF预览")
public void getPdfView(HttpServletRequest request, HttpServletResponse response){

BufferedInputStream in = null;
String remoteFileUrl = "String remoteFileUrl = "http://10.0.5.38/image/download2/node1/2021/06/25/10/12115030882021-06-254772444994050582221.pdf";";
try {
    BossPspData bossPspData = pspService.selectByPrimaryKey(id);
     
    if (null == remoteFileUrl || remoteFileUrl.length() == 0) {
	throw new RuntimeException("remoteFileUrl is invalid!");
    }

    URL url = new URL(remoteFileUrl);
    byte[] data = null;
    in = new BufferedInputStream(url.openStream());
    int i;
    while ((i = in.read()) != -1) {
	response.getOutputStream().write(i);
    }
    in.close();
    response.getOutputStream().close();
}catch (Exception ex){
    ex.printStackTrace();
}finally {
    try {
	if(in!=null){
	    in.close();
	}
    } catch (IOException e) {
	e.printStackTrace();
    }
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值