我有一个Coldfusion应用程序,在其中生成HTML服务器端,压缩,手动gzip并作为cfcontent发送回去。

看起来像这样:

<cfsavecontent variable="renderedResults">
    <cfoutput><p>Hello World</p></cfoutput>
</cfsavecontent>

<cfscript>
    compressedHTML = reReplace(renderedResults, "\>\s+\<", "> <", "ALL");
    compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(13), "ALL");
    compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(09), "ALL");
</cfscript>

<cfif cgi.HTTP_ACCEPT_ENCODING contains "gzip">
    <cfinvoke component="services.utils" method="gzip" stringToZip="#compressedHTML#" returnvariable="compressedHTML"></cfinvoke>
    <cfheader name="Content-Encoding" value="gzip">
</cfif>

<cfheader name="Content-Type" value="text/html; charset=ISO-8859-1">
<cfheader name="Content-Length" value="#len(compressedHTML)#" >
<cfcontent reset="no" variable="#compressedHTML#" />
<cfreturn  />

我的GZIP实用程序功能:
<cfscript>
    var result="";
    var text=createObject("java","java.lang.String").init(arguments[1]);
    var dataStream=createObject("java","java.io.ByteArrayOutputStream").init();
    var compressDataStream=createObject("java","java.util.zip.GZIPOutputStream").init(dataStream);
    compressDataStream.write(text.getBytes());
    compressDataStream.finish();
    compressDataStream.close();

    if(arrayLen(arguments) gt 1){
        result=binaryEncode(dataStream.toByteArray(),arguments[2]);
    }else{
        result=dataStream.toByteArray();
    }
    return result;
</cfscript>

我在所有页面上都运行此命令,并且无论是直接请求页面还是通过AJAX请求页面,它在大多数情况下都能正常运行。

但是有时我会收到以下错误:
Diagnose: Attribute validation error for tag cfcontent. java.lang.String is not a supported variable type. The variable is expected to contain binary data. <br>The error occurred on line 338.Browser: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
这是cfcontent行。

问题:
这可能是浏览器请求的页面不支持GZIP或禁用了GZIP吗?因为那样的话,HTML将仅被压缩而不是二进制编码?

如果是这样,解决办法是我必须对压缩的HTML进行二进制编码?

如果两者都错了,请说明一下。

最佳答案

尝试使用ToBinary()函数将变量转换为二进制,然后再将其传递给cfcontent,如下所示...

<cfcontent reset="no" variable="#ToBinary(compressedHTML)#" />

关于java - 如何解决Coldfusion cfcontent中的属性验证错误(java.string.lang不支持变量类型)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12949087/

10-11 09:16