2008-10-07 2 views
1

이것은 조금 이상합니다. 우리는 서버 (A)에서 실행되는 내부 웹 응용 프로그램과 서버 (B)에서 실행되는 문서 리포지토리를 가지고 있습니다.내부 서버에서 문서를 외부로 다운로드

페이지에 간단한 링크가있어서 사용자가 문서를 다운로드 할 수있게하려고합니다 (IIS 서버 (A)에서). 그러나이 문서는 사용자가 버튼을 클릭 할 때까지 (페이지가로드 될 때 표시 할 40 개 이상의 문서가 모두로드 할 수 없기 때문에) 서버 (A)에 존재하지 않습니다.

사용자가 링크를 클릭하면 그러면 다운로드하라는 메시지가 나타납니다. 문서가 서버 (A)에 복사 된 다음 브라우저에서 다운로드하라는 페이지로 리디렉션됩니다. 내가 올바르게 콘텐츠 헤더를 설정하고 FireFox에서 작동 믿습니다.

IE (7)가 창을 팝업 한 다음 창이 사라집니다. 보안 설정을 해제하면 정상적으로 작동하지만 옵션이 아닙니다.

모든 문제를 해결하는 방법. 예 서버 B는 또한 웹 서버

답변

5

세계가 서버 A를 볼 수 있고 서버 A가 서버 B를 볼 수 있다면 역방향 프록시를 설정하는 것이 좋습니다.

http://www.codeplex.com/urlrewriter

은 기본적으로 어떤이가하는 것은 세계가 서버 B로부터 만 역방향 프록시를 통해 다운로드 할 수 있습니다. 다음 규칙을 사용하여 위의 라이브러리로 역방향 프록시 인터페이스를 만들 수 있습니다.

RewriteRule ^/download/(.*) http://server-b/download/ $ 1 NC, P]

http://server-a/download/xyz.pdf

의 경우에 따라서

실제로

http://server-b/download/xyz.pdf

으로부터 그것을 요구할 것이라고하지만 것처럼 제공 될 그것 이것은 server-a에서오고있었습니다. 이것은 역방향 프록시가 server-a에서 server-b로 웹 연결을 만들고 server-a의 응답에 HTTP 응답을 복사하는 방식입니다.

도움이 필요하면 알려주세요.

+0

당신이 등장했을 때 같은 해결책을 쓰고있었습니다 :-). 나는 단지주의 할 점을 지적하고 싶다. 서버 B는 이것이 작동하기 위해서는 웹 서버가 필요하다. –

+0

사실, 나는 그 가정을 만들었다 고 생각하지만, 보통 그렇게 쉽게 나오기 쉽습니다. 서버가 아닌 경우 네트워크 드라이브를 사용하여 A에서 파일을 전송해야합니다. –

0

당신이 아약스를 사용할 수 있습니다 : 나는

ADDITION 서버 (B)에 문서에 직접 가리킬 수 없습니다? 예를 들어 사용자가 B에서 A로 파일을 가져 오기 위해 요청을 보내는 버튼을 클릭하면 페이지에 회 전자가 나타납니다. 그런 다음 복사가 완료되면 회 전자를 비활성화하고 사용자에게 다운로드 링크를 제공합니다.

나는 부결되었고, 코멘트 권한이없는, 그래서 내가 (아마도 이것은 단지 끔찍한 솔루션이며 나는 그것을 볼 수 없습니다) 여기에 정교한 거라 생각 :

  1. 사용자가 링크를 클릭하여 파일을 요청
  2. 요청이 서버 A에 전송하며
  3. 서버 A는 임시 폴더에있는 파일에 대한 링크를 다시 전송 아약스를 통해
  4. 서버 A에 복사 서버 B에서 임시 디렉토리에 파일을 링크를 비활성화되어

문서 서버가 웹 서버 (SMB, AFS, NFS 등)가 아닌 경우에 작동합니다.

+0

"이 문제를 해결하는 방법. 서버 (B)의 문서를 직접 가리킬 수 없습니다.",이 마지막 문장으로 인해 수행 할 수 없습니다. –

+0

링크를 사용하지 않도록 설정하는 등 불필요한 작업에 의존하기 때문에 이는 매우 나쁜 일입니다. 링크를 클릭하여 파일을 다운로드 한 다음 모든 AJAX를 사용하여 파일로 응답 할 수 있습니다. 브라우저는 응답을 기다리는 동안 잠길 것입니다. –