获取附件或图片的无需登录访问的URL(学习了解,不推荐实际使用)原创
9人赞赏了该文章
2,179次浏览
编辑于2022年07月15日 11:12:53
摘要由AI智能服务提供
本文讨论了苍穹与第三方系统集成时,如何使第三方系统访问苍穹中的图片或附件。苍穹存储附件使用的是文件服务的相对路径,并通过需要登录的download.do接口访问。为简化流程,可考虑直接拼接文件服务URL和相对路径,但存在安全风险。推荐通过拼接accesstoken的方式,进行安全认证后访问附件。
有用
反馈
背景:
在苍穹和第三方系统互相集成的情况下,经常需要把苍穹的附件或者图片等,直接让第三方系统可以访问。
分析:
查看对应的数据库表发现,对于图片或者附件等,在数据库存储的是文件服务中的相对路径。
前端拿到的URL是一个download.do的下载接口,需要登录访问,该接口会访问文件服务返回数据。
文件服务考虑安全性的问题,直接对外暴露会有风险,所以苍穹采用了分析2的访问方式。
不考虑风险的前提下,文件服务地址加上数据库的相对地址,就可以直接访问到该文件。
实现:
基于上述的分析,不考虑风险的前提下,我们可以手动拼接文件服务的URL给到第三方,这样就可以省去登录或者获取accesstoken的步骤。代码示例如下:
// 查某个页面的附件字段的数据 QFilter qFilter = new QFilter("billno", QCP.equals, "test0413-0004"); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("kdec_billdemo_0413", "id,billno,kdec_attachmentfield", new QFilter[]{qFilter}); // 附件字段,是个集合数据 DynamicObjectCollection attachmentfields = dynamicObject.getDynamicObjectCollection("kdec_attachmentfield"); // 获取索引为0的附件 DynamicObject对象 DynamicObject dynamicObject1 = attachmentfields.get(0); // 固定写法,前面获取到的是附件的关联关系对象,需要获取fbasedataid来取到最终封装属性的附件对象(不懂就调试看数据结构) DynamicObject attachmentfield = dynamicObject1.getDynamicObject("fbasedataid"); // 查询附件的相对路径 String url = attachmentfield.getString("url"); // 获取到的是download的前缀接口,需要登录 String property = System.getProperty("attachment.fileserver"); // 获取到的是文件服务的地址,值是在MC中配置的 String property1 = System.getProperty("attachmentServer.url"); // URL是download的前缀接口,需要登录访问 String fullURL = property+url; // URL是文件服务的地址,可以直接访问文件 String fullURL2 = property1 + url;
拿到的fullURL2是文件服务的地址,可以直接访问。
问题:
上述这种方式需要文件服务对外暴露,并且不需要认证就可以访问,可能会泄露整个系统的附件信息,风险极大,不建议使用。
获取到download.do的接口,可以拼接accesstoken拼在url后面,就可以直接访问,推荐这种通过认证的方式访问附件。accessToken的获取方式可以搜索开放平台的相关文档。
赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读