什么是使用流文件传输
我们在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测试  可以看到这个弹窗,表示这个就可以下载了。  点开以后也是正常的一个文件。
|