OSB学习(接口下载文件【流的形式】)

  • 什么是使用流文件传输
  • 1、我们要干什么
  • 2、接口开发
    • 2.1、控制台通过执行PL显示流文件信息
      • 2.1.1、创建基本的目录结构
      • 2.1.2、打开项目,然后创建BS
      • 2.1.3、创建PL和PS
      • 2.1.4、双击进入PL,然后设置PL的组件
      • 2.1.5、设置完成,直接进行测试
    • 2.2、网页直接浏览,然后进行文件下载
    • 2.3、通过postman调用接口实现图片下载
    • 2.4、通过请求设置下载的文件的文件名
      • 2.4.1、创建PL和PS
      • 2.4.2、设置PL
      • 2.4.3、获取请求体中的文件名
      • 2.4.4、修改文件输出的名字
      • 2.4.5、接口测试
      • 2.4.6、已完成的接口展示
    • 2.5、浏览器携带参数,下载文件
      • 2.5.1、创建PL和PS
      • 2.5.2、设置PL接口的流程
      • 2.5.3、测试接口
      • 2.5.4、网页测试
    • 2.6、实现视频下载
      • 2.6.1、在网页找一个时间短一点的视频的文件
      • 2.6.2、设置BS,PL,PS

什么是使用流文件传输

我们在java学习的时候学到过,数据是以流的形式传输的。同样的,我们可以使用接口来进行数据的传输,这些数据可以是图片,文字,视频等。

简单来说,传输就是把文件获取成流,然后把流放入管道中,然后通过调用来获取这个流文件。

1、我们要干什么

今天的内容就是研究一下关于文件通过什么样的方式进行传输的。

今天的接口要实现的功能是:
1、控制台通过执行PL显示流文件信息
2、通过postman调用接口然后实现图片的下载
3、通过postman传递一个请求,然后通过请求设置下载的文件的名字
4、直接在浏览器输入接口地址,然后进行文件下载
5、直接在浏览器上输入接口地址(要携带参数),然后进行文件下载
上面的是图片,我们下面就搞一下视频
1、通过postman调用接口实现视频的下载

2、接口开发

2.1、控制台通过执行PL显示流文件信息

2.1.1、创建基本的目录结构

2.1.2、打开项目,然后创建BS





然后要设置一个信息的地址,这个地址可以是图片也可以是其他的
我这里设置的是一张图片

地址是这个

http://tse1-mm.cn.bing.net/th/id/R-C.53e7e06bd0322cc0f2873b29aeb919e0?rik=lVfLPnUjuDg6DA&riu=http%3a%2f%2f5b0988e595225.cdn.sohucs.com%2fimages%2f20190116%2ffc855616fb8041a49ede6c21d48e9bd0.jpeg&ehk=wZqTGpNw99SnqXOCq%2btX2i547h%2bhDrTitxBZ%2fwpoDJs%3d&risl=&pid=ImgRaw&r=0
有些网站的图片的地址是不可以访问的,如果我的这个你访问不到,那就直接去搜一张图片然后修改为http协议的就可以了

记得一定一定要是http协议的

2.1.3、创建PL和PS

直接拖拽BS左上角的小箭头就可以拖出来一个pl


2.1.4、双击进入PL,然后设置PL的组件

我们在这个地方是很简单的,只需要添加一个
Transport Header组件就可以了

设置组件的参数

2.1.5、设置完成,直接进行测试

将jar包直接导出,然后直接打开运行

可以看到响应文档里面写了一堆16进制的数组
这就是一个数据流文件
这样表示我们已经获取了这个图片地址所对应的图片的流文件

我们可以去查看调用跟踪是不是正常的

这样我们就完成了这个基础的流文件接口

那么如何把这个文件下载到我们自己的电脑上呢,我们继续往下看

2.2、网页直接浏览,然后进行文件下载

通过之前的学习,我们知道我们写的这个接口是会暴露到外界一个地址的,也就是我们PS的地址

所以我们直接去使用ps的地址来进行访问网页

如果不知道地址在哪里可以通过查看控制台来找到这个地址

我的地址就是这个

http://192.168.65.145:8011/DownLoadProject/ProxyServices/Pic_1_PS

其实这个PS 的地址的后半段就是我们文件在jar包里面的路径

直接进行访问

可以看到我们每次执行一次,都会刷新一次界面,然后下载列表也会多一个文件
打开文件查看

就可以看到,我们已经把这个图片下载到了电脑上
浏览器不同,下载的方式也不同
上面的是EDG
下面给大家展示火狐的访问


和EDG不同,火狐会多一个确认的窗口

那么如何同过接口调用的方式进行下载呢
我们这里就要使用postman来进行接口调用
继续往下看看吧

2.3、通过postman调用接口实现图片下载

打开postman
然后输入刚刚我们访问浏览器的地址
注意设置post请求

然后直接调用接口
我们会发现,响应框里面全是看不懂的乱码

我们查看一下响应的headers


虽然显示是调用成功的,但是我们并没有看到我们的文件下载到我们的电脑上

呢么我们如何下载这个文件呢

这里需要使用我们之前没有用到过的调用方式:发送并下载(Send and Download)

在发送请求的旁边有一个小箭头,下面会显示我们这里用到的命令

直接点击就可以了
可以看到,这个时候,也是会弹出来一个窗口,给用户展示下载的文件存放的位置


我这里就直接存放在桌面了
点击保存

就会看到我们的桌面多了一个照片,和之前一样,也是可以直接打开的

2.4、通过请求设置下载的文件的文件名

上面说了很多次如何设置下载的文件的文件名,下面就跟大家展示如何设置这个文件的文件名。
我们这里就新建一个和上面一样的接口用来开发了。

2.4.1、创建PL和PS



注意设置请求信息

2.4.2、设置PL

双击进入PL


放置一个routing

设置路由的地址
这里的路由就直接设置之前调用成功的BS就可以了



设置参数

2.4.3、获取请求体中的文件名

我在这里就直接获取了,使用xml的稍后会说到

2.4.4、修改文件输出的名字

打开Transport Header组件
然后使用拼接的方法,把这个字符串和我们的获取的名字进行拼接

如果一直弹窗,就保存一下在进行操作


点击value



选择concat


使用方法,然后把这两个字符串拼接起来。

2.4.5、接口测试

我们直接在控制台进行操作

调用成功

查看调用跟踪

我们调用postman再来测试一下

同样使用 发送并下载也是可以得到一张图片

这样就完成了这个简单的开发
那如果是xml格式的请求又如何获取这个文件名称呢

这里需要进行一层一层的获取你想要的到的数据所属的标签了。
具体的操作请看我的另一篇文章:
https://blog.csdn.net/h22407/article/details/120048941

这里需要注意的是如果想要发送一个xml形式的text数据且数据不唯一
就像这个一样

可以自己测试一下,如果直接写出来,就只能获取到最上面的那一层,下面的是获取不到的
所以我们需要包裹一层标签
像这样

2.4.6、已完成的接口展示





其实和上面的是一样的,就是获取了一下数据

2.5、浏览器携带参数,下载文件

在我们之前的学习中,我们知道可以直接复制连接然后下载文件,那么我们如何让这个链接携带参数,然后完成下载的操作呢。

时间20210909.10.53

2.5.1、创建PL和PS

这里创建的操作我就不再赘述了哦,操作流程和之前是一样的。

2.5.2、设置PL接口的流程

1、先拉取一个routing组件然后关联到我们上面写过的 Pic_1_BS.bix

2、获取我们浏览器要输入的参数
这个参数就是我们在访问是链接里面的?后面的东西
这个在请求的时候是存放在inbound里面的
我们可以来看一下
这个链接发送的请求所对应的inbound就是下面的这个样子的

可以看出来,这个一层一层的和我们之前的获取outbound的形式是一样的,也是要用斜杠来进行逐层查询的
这里有一点不同的地方就是我们是需要通过key来获取value的,也就是我们需要先获取name,然后再去获取我们的value的值

并且有一点:这里的获取和替换body的内容是不可以同时进行的,如果想查看自己获取的值是否是自己想要的,需要分开来做这个事情。


知道了这些以后我们就开始进行设置

对了replace只是为了去验证你是否能获取到正确的值
在这里其实是不需要多余的,所以我下面就不写了,如果感兴趣,可以自己去研究一下。

拉取一个ass插件,然后设置里面的参数,我这里的inbound是这样的一层一层的,这里的value就可以通过

[@name='变量名称']/@value 来获取

下面的报红就是命名空间的问题,添加一下就可以了。

在这里的uri就是我们刚刚看到的inbound里面的地址
如果子标签没有写xmln是什么,那就表示当前标签的命名空间和父标签是一样的。


红色框框里面的就是uti,前面的prefix可以随便写

另一个也是一样的

3、获取value并赋值给fileName


4、修改文件名称

这个和之前的是一样的。

最后的PL就是这个样子的:

2.5.3、测试接口

我们在这里就直接使用postman去测试了

可以看到,我们获取到了信息,并且也能获取到我们的流文件

2.5.4、网页测试

这次我们用火狐浏览器来进行测试

在火狐直接打开也是可以看到我们的图片的。

这样我们就完成了一个在浏览器传递参数然后下载文件的操作。

2.6、实现视频下载

既然我们的图片可以下载,是不是视频也是可以通过我们的流来实现下载呢。

我们接下来就试试看咯

2.6.1、在网页找一个时间短一点的视频的文件

http://video-qn.51miz.com/preview/video/00/00/12/18/V-121890-8E465F26.mp4

这个网站恰好可以满足需求哈哈,运气太好了哈哈

好我们资源找到了,就来测试一下吧

2.6.2、设置BS,PL,PS

这个TH组件依旧是我们熟悉的设置的方式

然后我们直接进行测试

测试的时候一定要先去测试我们的BS是否能接通

打开bs然后直接进行测试就可以

在程序进行到30秒的时候,会报一个错误

这是错误的解释

这我们就可以知道这个是一个传输时出现的错误
也就是传输的方式的错误
我们直接用postman去测试一下

可以看到目标MP4文件的传输格式是直接进行传输
而我们的传输协议默认是这样的


分块流传输模式
我们把这个默认的取消掉就可以了。

直接取消勾选就可以了

要记得保存然后再激活
激活以后再去检查一下看是不是已经修改了


这样表示就是已经修改了。
再次测试



再次进行send and Download测试

可以看到这个弹窗,表示这个就可以下载了。

点开以后也是正常的一个文件。

2021-09-07-OSB学习(接口下载文件--流)相关推荐

  1. Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。

    URL文件地址下载方法 一.正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性 //文件下载downFile() {if ('download' in document. ...

  2. vue 后台返回的文件流进行预览_vue实现下载文件流完整前后端代码

    这篇文章主要为大家详细介绍了vue实现下载文件流完整前后端代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 使用Vue时,我们前端如何处理后端返回的文件流 首先后端返 ...

  3. js实现下载文件流图片

    1.请求响应需要设置响应类型为流 responseType: 'blob', 2.下载文件流 // res 为后台返回的文件流 const reader = new FileReader();read ...

  4. vue3下载文件流 下载excel

    //点击下载按钮qaGetDebitVoucher:async (id:any)=>{let res=await $axios.get($api.qaGetDebitVoucher+id,{ r ...

  5. js下载文件流,提示文件损坏问题

    记录一下前端下载后端返回的文件流,提示文件损坏问题. const blob = new Blob([content.data], {// type是需要对应的文件类型type:"applic ...

  6. Python接口下载文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang''' 注意:定义类的时候,内部方法之间的互调 步骤: 1.按照流 ...

  7. swagger knife4j 解决接口下载文件响应乱码问题

    ** 在@ApiOperation注解中加上produces = "application/octet-stream" ** 添加效果如图所示: @ApiOperation(val ...

  8. fegin接口下载文件

    服务提供端这里结合的是minio文件服务器: controller,这里一定是void,不要指定返回内容 @RequestMapping("/file") @RestControl ...

  9. vue-axios下载文件流blob,ie下载报传递给系统调用的数据区域太小.ie文件流下载报错;文件下载失败将blob的错误信息转换成json格式

    本次下载是后台文件流传输,前端下载,前端将拿到的下载id和名称downloadName传递给下载方法:如果是多个下载,可以采用数组for循环 情景描述: 1.如果符合导出条件, 后端直接返回数据流,如 ...

最新文章

  1. android控制音量加减命令 python_盘点5种基于Python生成的个性化语音方法
  2. filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...
  3. 【Android】刷Rom:adb reboot bootloader
  4. 理论修炼之ETCD,高一致性Key-Value服务提供者中的佼佼者
  5. 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
  6. 2021年上海高考小三门成绩查询,高考小三门怎么算分 上海2021高考小三门
  7. linux 常见的挂载命令 mount showmount umount
  8. vue3快速上手(尚硅谷视频笔记)
  9. roundcube db.inc.php,开源电子邮件系统(Roundcube Webmail)
  10. python备份cisco交换机_思科交换机备份与还原
  11. Android Studio升级到3.0版本后布局不能预览解决方案
  12. 宏碁暗影骑士4安装不了Linux,宏碁暗影骑士4评测:在细节中不断改进前行!
  13. HTML CSS JavaScript学习心得
  14. mt6737电池状态监测
  15. samba xp linux共享文件
  16. UnityStandardAsset工程、源码分析_4_赛车游戏[玩家控制]_摄像机控制
  17. CP-net第三部分解读
  18. TC-63式空气取样器改进了流量调节
  19. hadoop权威指南(一)
  20. Motion Factory特效制作AE脚本五套 Particle/ActionFX/Glitch/TypeBuilder/Hi-Tech HUD

热门文章

  1. iOS-CLLocationManager定位不准问题
  2. 湖北立探述离婚纠纷中不动财产何如公平分配问题
  3. 活动直播做多会场切换功能(会场一、会场二、会场三自由切换)
  4. 算法之美~时间复杂度
  5. python实现网页微信登陆_django 微信网页授权登陆的实现
  6. 抖之恒科技python常用库之工具库schema
  7. scat 文件及Flash
  8. 对dataframe类型 时序数据按时间(戳)先后顺序排序并作图
  9. 微信小程序上传图片怎么限制大小
  10. 常用的数据分析方法都有哪些(一)