2015-01-31 7 views
0

Railo 서버에서 Helicon Ape의 mod_xsendfile을 사용하려고합니다 (Windows 2012 R2). mod_xsendfile 함수가 올바르게 작동하고 PHP와 잘 작동하면 파일을 전달하고 콘텐츠 길이 값도 브라우저로 전달합니다. PHP에서는 파일 크기 제한이 없으며 파일 크기에 관계없이 메모리를 많이 사용하지 않습니다.Helicon Ape Railo가있는 X-Sendfile

Railo의 경우 명백한 첫 번째 시도입니다.

<cfcontent type="text/plain"> 
<cfheader name="content-disposition" value="attachment; filename=test.txt"/> 
<cfheader name="X-Sendfile" value="D:\iis\hello.txt"/> 

이것은 작동하지 않습니다. 빈 파일을 반환합니다. Helicon Ape에서 생성 된 오류 로그가 없으므로 Header X-Sendfile이 IIS /로 올바르게 전달되지 않는다고 가정하는 것이 안전합니다.

두 번째 시도

<cfheader name="content-disposition" value="attachment; filename=test.txt"/> 
<cfset Response = GetPageContext().GetResponse() /> 
<cfset Response.setHeader('X-Sendfile','D:\iis\hello.txt')> 
<cfset Response.setContentType('plain/text')> 
<cfset Response.GetOutputStream().Flush() /> 
<cfset Response.Reset() /> 
<cfset Response.Finish() /> 

제한 (1)와 함께 작동 : 파일 크기가 2GB보다 더 브라우저 오류 그것은 작은 파일 크기가 잘 작동 "ERR_INVALID_CHUNKED_ENCODING"를 반환, 메모리 문제가 없습니다. (다시 PHP는이 문제가없는 것 같습니다.) IIS는 크기 제한이 없습니다.

제한 2 : 이것은 내용 길이를 브라우저에 전달하지 않으므로 브라우저는 크기를 알 수 없습니다. 파일.

세 번째 시도 : 수동으로 내용 길이를 추가하십시오. 브라우저에 전달

<cfset filePath = "D:\iis\246.zip"> 
<cfheader name="content-disposition" value="attachment; filename=246.zip"/> 
<cfset Response = GetPageContext().GetResponse() /> 
<cfset Response.setContentLength(createObject("java","java.io.File").init(filePath).length())> 
<cfset Response.setHeader('X-Sendfile', filePath)> 
<cfset Response.setContentType('application/octet-stream')> 
<cfset Response.GetOutputStream().Flush() /> 
<cfset Response.Reset() /> 
<cfset Response.Finish() /> 

내용 길이는 (이 PHP로 필요하지 않습니다)하지만, PHP와는 달리, IIS는 파일에 대한 메모리를 할당하려고하고 곧 연산의 오버 플로우 또는 언더 플로우 '와 끝까지 "오류.

나는 GetPageContext(). GetResponse()를 올바르게 처리하지 않을 것이라고 확신한다. 누구든지 나를 도와 줄 수 있다면, 나는 매우 감사 할 것입니다.

+0

Railo가 IIS에서 실행되도록 구성되는 방법은 무엇입니까? Helicon Zoo를 사용하여 Railo를 IIS와 통합 했습니까? https://www.helicontech.com/zoo/docs/java-railo.html 일부 다른 커넥터는 Railo 이후에 실행될 수있는 모듈을 제한하므로 현재 x-sendfile 작업은 Ape가 아닌 Railo에 의한 서버 일 가능성이 높습니다 (따라서 메모리 할당 문제). – Yaroslav

+0

동물원에는 설치되어 있지 않습니다. Railo는 이미이 서버에 설치되었습니다. 그래 너가 옳아. 그것은 Ape 또는 Railo에서 Ape에게 제공되지 않았습니다. – user3839184

+0

그러면 Railo가 IIS에 어떻게 연결되어 있습니까? 나는 바코드 커넥터에 대해서는 확신하지 않지만, 다른 몇몇은 (자카르타 등과 같이))는 IIS가 요청을 처리 할 수 ​​없게하는 것으로 알려져 있습니다. 즉, 응답 필터가 적용되지 않을 수 있습니다. Ape의 mod_xsendfile은 응답 필터로 작동하기 때문에 작동 할 수 없습니다. Zoo 커넥터는 Ape와 함께 작동합니다. 설치하려고 할 수 있습니다. 또는 보너스 코드를 사용해보십시오 (하지만 테스트하지는 않았습니다). – Yaroslav

답변

0

BonCode를 사용하여 IIS에 연결하는 경우 서버 메모리 한도가 과부하되지 않으면 서 큰 파일을 스풀링 할 수있는 기능이 있습니다. 따라서 효율적인 스트리밍을 가능하게합니다. 예를 들어, : 당신은 (\ WINDOWS 다 확인) : 당신의 BonCode 설정으로 설정 FlushThresholdBytes를 추가해야합니다

<FlushThresholdBytes>10240</FlushThresholdBytes>

그러나, 라일로 내 제한된 이해에서 전체를로드하는 것 파일을 메모리에 저장하면 스트리밍 할 수있는 파일 크기가 제한됩니다.

-john