写入文件(将Base64转换为二进制)值使用VFS和ESB 4.8.1

时间:2015-06-09 06:12:16

标签: binary base64 wso2 wso2esb file-writing

从我为图像文件获取的Ui base64值,我的要求是将所有值转换为二进制,然后写入文件。如果我打开该文件,图像应该打开。

此代码用于使用脚本进行base64到二进制转换,然后写入文件:

<filter source="get-property('type')='Yes'" regex="true">
                 <then>
                    <property xmlns:ns2="http://org.apache.synapse/xsd"
                              name="transport.vfs.ReplyFileName"
                              expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.jpeg')"
                              scope="transport"
                              type="STRING"/>
                    <property name="fieldValue"
                              expression="//FieldValue"
                              scope="default"
                              type="STRING"/>
                    <script language="js">var t = mc.getProperty("fieldValue");
                    var input= t;    


 var chr1, chr2, chr3 = "";
 var enc1, enc2, enc3, enc4 = "";
 var i = 0;
 var keyStr = "ABCDEFGHIJKLMNOP" +
           "QRSTUVWXYZabcdef" +
           "ghijklmnopqrstuv" +
           "wxyz0123456789+/" +
           "=";
           var output=t.length;
 for( i=0;i &lt; input.length;i++){
    enc1 = keyStr.indexOf(input.charAt(i++));
    enc2 = keyStr.indexOf(input.charAt(i++));
    enc3 = keyStr.indexOf(input.charAt(i++));
    enc4 = keyStr.indexOf(input.charAt(i++));
    chr1 = (enc1 &lt;&lt; 2) | (enc2 &gt;&gt; 4);
    chr2 = ((enc2 &amp; 15) &lt;&lt; 4) | (enc3 &gt;&gt; 2);
    chr3 = ((enc3 &amp; 3) &lt;&lt; 6) | enc4;    output = output + String.fromCharCode(chr1);

    if (enc3 != 64) {
       output = output + String.fromCharCode(chr2);
    }
    if (enc4 != 64) {
       output = output + String.fromCharCode(chr3);
    }

   chr1 = chr2 = chr3 = "";
   enc1 = enc2 = enc3 = enc4 = ""; 
   }
   mc.setProperty("result",output);</script><log level="custom">
                       <property name="Before Payload" expression="get-property('result')"/>
                    </log>
                    <payloadFactory media-type="xml">
                       <format>
                          <ns:text xmlns:ns="http://ws.apache.org/commons/ns/payload">$1</ns:text>
                       </format>
                       <args>
                          <arg evaluator="xml" expression="get-property('output')"/>
                       </args>
                    </payloadFactory>
                    <property name="OUT_ONLY" value="true"/>
                    <property name="messageType"
                              value="text/plain; charset=windows-1252"
                              scope="axis2"/>
                    <send>
                       <endpoint name="FileEpr">
                          <address uri="vfs:file://D:/Documents/File/out"/>
                       </endpoint>
                    </send>
                 </then>

脚本文件也有一些问题,长度函数没有采取,但在脚本中如果我为它采取的那些声明一些静态值。 所以,任何人都可以帮我解决这个问题 1. 有没有办法直接将base64转换为二进制? 2.这个脚本作为一个独立的工作正常。我可以使它成为代码吗?

0 个答案:

没有答案