2017-07-25 120 views
0

我试图用#ToString(ToBinary(stringToDecode ))#来解码base64字符串,并且coldfusion提供了一个错误,说明该参数必须是base-64编码的字符串。该字符串来自第三方,应该是一个pdf文件。下面是它的一部分:Coldfusion的base64解码错误

JVBERi0xLjUKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmplY3QvUmVzb3VyY2VzPDw+Pi9TdWJ0 eXBlL0Zvcm0vQkJveFswIDAgMTUuNDQgMTUuNDZdL01hdHJpeCBbMSAwIDAgMSAwIDBdL0xlbmd0 aCAyMi9Gb3JtVHlwZSAxL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtCk9lHxbaEDXZpIO1A/Gj mGuxQdW3qkgKZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8L1R5cGUvWE9iamVjdC9SZXNvdXJj ZXM8PD4+L1N1YnR5cGUvRm9ybS9CQm94WzAgMCAxNS40NCAxNS4xOV0vTWF0cml4IFsxIDAgMCAx IDAgMF0vTGVuZ3RoIDIyL0Zvcm1UeXBlIDEvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0KtDN8 NkUKYx04Gj8V9LfOboGvN9VRIgplbmRzdHJlYW0KZW5kb2JqCjMgMCBvYmoKPDwvVHlwZS9YT2Jq ZWN0L1Jlc291cmNlczw8Pj4vU3VidHlwZS9Gb3JtL0JCb3hbMCAwIDE1LjQ0IDE1LjcyXS9NYXRy aXggWzEgMCAwIDEgMCAwXS9MZW5ndGggMjIvRm9ybVR5cGUgMS9GaWx0ZXIvRmxhdGVEZWNvZGU+ 

果然不出我所想到的是空间是一个问题,但我做了替换“与“”替换所有”,他们仍然在那里。还有什么我应该做的?

+0

[ColdFusion中转换原始PDF数据]的可能的复制(https://stackoverflow.com/questions/45289637/converting-raw-pdf-data-in- Coldfusion) – haxtbh

+0

@haxtbh我试图把它视为过于宽泛;之前我不知道编码,现在我知道它是base64。 –

+0

你有看看这个网页吗? https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/binarydecode.html看起来你在你的例子再次尝试将字符串转换为二进制和回字符串以上。 –

回答

1

在我的测试中,我可以采用本地pdf并将其转换为字符串以模仿您从API获取的字符串。然后我可以把它转换回PDF格式。

当我使用上面提到的字符串时,我无法使其工作。不确定是否有任何东西是你在这里粘贴它的名单。

这是我的代码,也许你可以改变它使用从API的字符串。

<cffile action="readbinary" file="#expandPath('./test.pdf')#" variable="thefile"/> 

<cfset the_string = toString(theFile)/> 

<cfscript> 
patrick_string = ToBase64("JVBERi0xLjUKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmplY3QvUmVzb3VyY2VzPDw+Pi9TdWJ0 eXBlL0Zvcm0vQkJveFswIDAgMTUuNDQgMTUuNDZdL01hdHJpeCBbMSAwIDAgMSAwIDBdL0xlbmd0 aCAyMi9Gb3JtVHlwZSAxL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtCk9lHxbaEDXZpIO1A/Gj mGuxQdW3qkgKZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8L1R5cGUvWE9iamVjdC9SZXNvdXJj ZXM8PD4+L1N1YnR5cGUvRm9ybS9CQm94WzAgMCAxNS40NCAxNS4xOV0vTWF0cml4IFsxIDAgMCAx IDAgMF0vTGVuZ3RoIDIyL0Zvcm1UeXBlIDEvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0KtDN8 NkUKYx04Gj8V9LfOboGvN9VRIgplbmRzdHJlYW0KZW5kb2JqCjMgMCBvYmoKPDwvVHlwZS9YT2Jq ZWN0L1Jlc291cmNlczw8Pj4vU3VidHlwZS9Gb3JtL0JCb3hbMCAwIDE1LjQ0IDE1LjcyXS9NYXRy aXggWzEgMCAwIDEgMCAwXS9MZW5ndGggMjIvRm9ybVR5cGUgMS9GaWx0ZXIvRmxhdGVEZWNvZGU+"); 

string2 = toBinary(ToBase64(the_string)); 

binencode=BinaryEncode(string2, "Base64"); 

</cfscript> 


<cffile action="write" file="#expandPath('./randy.pdf')#" output="#thefile#" addnewline="No" /> 

<a href="randy.pdf">click</a> 

更新的代码:

<cffile action="readbinary" file="#expandPath('./test.pdf')#" variable="thefile"/> 

<cfset the_string = toBase64(theFile)/> 

<cfscript> 

string2 = toBinary(the_string); 

</cfscript> 


<cffile action="write" file="#expandPath('./randy.pdf')#" output="#string2#" addnewline="No" /> 

<a href="randy.pdf">click</a> 
+0

我想粘贴整个字符串为您完全复制我的问题,但它是太大,把我的问题(我的浏览器冻结,如果我把它粘贴到问题编辑器)是否有一个仓库,我可以把它吗? –

+0

你应该能够改变我的代码,看看你是否能得到它的工作。注释掉cffile并执行,它应该为您运行。 –

+0

一个更好的主意可能是将字符串保存到文件中,并在测试时进行cffile读取,以便在代码文件中没有300kb的文本。 –