2012-10-18 3 views
2

나는 HTML 서버 측을 생성하고, 압축하고, 수동으로 gzip하고 cfcontent로 다시 보내는 Coldfusion 응용 프로그램을 가지고 있습니다. ColdFusion cfcontent에서 속성 유효성 검사 오류를 수정하는 방법 (java.string.lang은 지원되지 않는 변수 유형)?

은 다음과 같습니다

<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를 전달하기 전에 이진 당신의 변수를 변환

답변

1

시도 ...

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

흠. 그건 간단하게 들리네 .-) – frequent

+0

그래서 내가 gzipped (이미 인코딩 된) 여부를 확인해야 할 것 같아요, 아니라면, 귀하의 스 니펫을 사용합니다. 좋은 소리. 내가 필요로 할 때만 내 실수를 재현 할 수 있다면 ... – frequent