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()를 올바르게 처리하지 않을 것이라고 확신한다. 누구든지 나를 도와 줄 수 있다면, 나는 매우 감사 할 것입니다.
Railo가 IIS에서 실행되도록 구성되는 방법은 무엇입니까? Helicon Zoo를 사용하여 Railo를 IIS와 통합 했습니까? https://www.helicontech.com/zoo/docs/java-railo.html 일부 다른 커넥터는 Railo 이후에 실행될 수있는 모듈을 제한하므로 현재 x-sendfile 작업은 Ape가 아닌 Railo에 의한 서버 일 가능성이 높습니다 (따라서 메모리 할당 문제). – Yaroslav
동물원에는 설치되어 있지 않습니다. Railo는 이미이 서버에 설치되었습니다. 그래 너가 옳아. 그것은 Ape 또는 Railo에서 Ape에게 제공되지 않았습니다. – user3839184
그러면 Railo가 IIS에 어떻게 연결되어 있습니까? 나는 바코드 커넥터에 대해서는 확신하지 않지만, 다른 몇몇은 (자카르타 등과 같이))는 IIS가 요청을 처리 할 수 없게하는 것으로 알려져 있습니다. 즉, 응답 필터가 적용되지 않을 수 있습니다. Ape의 mod_xsendfile은 응답 필터로 작동하기 때문에 작동 할 수 없습니다. Zoo 커넥터는 Ape와 함께 작동합니다. 설치하려고 할 수 있습니다. 또는 보너스 코드를 사용해보십시오 (하지만 테스트하지는 않았습니다). – Yaroslav