从HTTP响应保存文件

时间:2018-12-25 18:58:56

标签: wso2esb

寻找一些指导或指针,不一定是解决方案,但是我将在完成后发布解决方案。

使用正在调用外部服务的WSO2 ESB / Integrator。根据外部服务[1],他们将在HTTP响应中返回一个文件作为响应。我要的是这个文件;将二进制文件保存到磁盘并通过网页重定向发送给用户。

有人能指出我可以接受HTTP响应并创建文件的方向吗?我想我需要转换响应并使用VFS。

任何帮助将不胜感激。

[1]-https://support.webmerge.me/hc/en-us/articles/206526216-Webhook

2 个答案:

答案 0 :(得分:0)

这很简单,第一步是在de axis2.xml配置文件中启用VFS的传输发送器(如果您还想读取文件,则启用接收器)。 这些行已经在那里,只需要取消注释即可。

<transportReceiver name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportListener"/>

<transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender"/>

接下来,您将需要将响应转换为想要写入文件的任何格式。例如,您可以使用xslt转换,有效负载介体或数据映射器介体。

之后,您可以简单地将有效负载发送到vfs端点。例如,这可以是本地文件位置,也可以是远程ftp位置。确保您具有在所述位置写入文件的正确特权。例如,如果您以WSO2用户身份运行esb,并想将文件写入/ opt / wso2 / fileexchange,请确保WSO2用户对该文件夹具有写权限。

然后要写到该位置,只需使用发送介体,如下所示:

<property xmlns:ns2="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" value="myFile.txt" scope="transport"/>
    <property name="OUT_ONLY" value="true"/>
    <send>
        <endpoint name="FileEpr">
            <address uri="vfs:file:///opt/wso2/fileexchange"/>
        </endpoint>
    </send>

确保将transport.vfs.ReplyFileName属性设置为要写入的文件名。还有OUT_ONLY属性,因为文件系统不会向您发送很好的回复。

有关此主题的更多信息,您可以随时查看this blog

答案 1 :(得分:0)

我更喜欢发送引用文件的URI,而不是发送二进制数据。因此,更有效的方法是将文件上传到文件系统,然后使用String(URI)进行传输。仅在需要读取文件数据时,然后从FileSystem下载它。而且,您应该确保FileSystem和最终用户之间的网络正常。