从我为图像文件获取的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 < 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 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 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.这个脚本作为一个独立的工作正常。我可以使它成为代码吗?