记录问题解决方案(无代码)-----公网无法访问内网资源文件,但项目必须提供公网访问内网部分文件

情景:
1、用户上传的文件存储于内网的某文件管理服务器中
2、前端在某些情景上,需要展示用户上传的图片、或文档
3、但是!用户访问时,无法访问内网资源!!!
踩坑:
原以为数据库记录文件路径,然后在传给前端即可,但是没想到。。。天杀的文件服务器不能用于公网访问
解决方案:

		1、在服务端,提供一个支持get访问的web接口,用于接收文件的唯一标识(需要提供HttpServletResponse 入参)
		2、用此接口调用内网相关处理逻辑,将文件转换为byte[],原因服务端可以访问内网资源,所以转换数据这里,需要自己想办法了,无非就是InputStream转byte[]
		3、设置此response 为强制下载
		 response.setContentType("application/force-download");  // 此处需要动态拼接自己的文件类型,示例:application/force-download;application/vnd.ms-excel
         response.setHeader("Content-Disposition", "attachment;fileName=" + 文件名称.后缀名);
		// 文件类型参考:https://tool.oschina.net/commons
		4、将拿到的byte[](二进制数据流) 写入到response中,并强制刷新输出流

实现原理:
1、下载文件也好,访问资源也罢,实际上多数都是get请求,既然是请求,那么都可以调用后端的某个controller进行处理
2、前端标签的 img src=“此处是可以使用二进制数据的”,这样就解决了图片显示的问题(即使设置了强制下载,也可以正常显示,具体原因未知,我个人认为还是二进制数据放到了src中)
3、文件下载,文件下载也是get请求,当然,如果你的项目是POST请求,那么改造接口支持POST就行了,由于设置了强制下载,所以,文件下载自然实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂的菜小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值