2013-03-16 1 views
1

나는에 name 매개 변수를 전달하여 get (다운로드) 한 보편적 인 통화가 있습니다 파일의 모든 유형 (웹 브라우저에 의해 반드시 타사 응용 프로그램에 의해 불려갑니다)는 HTTP API 서버를 개발했습니다 요구 된 파일의 문의 캐릭터 라인 어떤 파일 이건 관계없이 모든 호출은 Get이라는 동일한 사용자 지정 요청 처리기에서 처리됩니다 (표준 HTTP get과 혼동하지 마십시오). 쿼리 문자열에는 고유 한 파일을 식별하는 속성 name이 포함되어 있습니다. 어떻게하면 범용 HTTP 요청의 응답 파일에 고유 한 이름을 부여 할 수 있습니까?

그래서 요청이처럼 보일 수 있습니다 : ... 모든

http://MyServerURL.com/Get?Key=SomeAPIKeyForAuthentication&Name=SomeUniqueIdentifier 

첫째, 내가 분명히 서버가 예를 들어에만 URI를 사용하여 파일을 가져올 수 있습니다 알고

http://MyServerURL.com/SomeUniqueIdentifier?Key=SomeAPIKeyForAuthentication 

...하지만 디자인은이 유니버설 get 명령을 사용하기 위해 특별히 의도되었으므로이 고유 식별자를 쿼리 문자열에 보관해야합니다. 이 API에 연결되는 실제 응용 프로그램은이 파일 이름을 알 필요가 없지만 누군가가 브라우저에서 파일을 다운로드하도록 URL을 수동으로 제공하면 이벤트가 발생할 수 있습니다.

그러나 웹 브라우저를 통해 파일을 다운로드 할 때마다 전화가 get이므로 파일 이름도 get이됩니다.

차라리 그냥 get보다, 고유 식별자로 다운로드 한 파일 이름을 강제로 내 서버에 구현할 수 HTTP의 모든 트릭이 있습니까? 예를 들어, 리디렉션을 사용하는 것과 같은 일부 방법은? 나는 웹 서버로 인디 10 TIdHTTPWebBrokerBridge 델파이 XE2에서 사용하고

. 그것 (이 경우, SomeUniqueIdentifier에) 내가 원하는 문자열 응답의 파일 이름을 만들기 위해,이 get 요청을 처리 할 때 나는 (그 해당 TWebModule 핸들러에서 기술적으로)이 구성 요소에 방법을 찾고 있어요. 나는 "URL 재 작성"이라는 용어를 들었다. 그러나 그것은 다소 다른 주제이고, 그것이 내가 필요로하는 것이 아니라고 생각한다. 당신이 indpendently를 가져 오는 데 사용되는 URL의 HTTP 다운로드에 대한 파일 이름을 설정하려는 말의 다소 긴 숨이 찬 방법으로 보인다

답변

7

. 어떤 경우에는 원하는 파일 이름을 지정하는 Content-Dispositon 헤더를 보내면됩니다. section 19.5.1 of rfc 2616

등을 참조하십시오.

+0

감사합니다. 매우 유망 해 보였습니다. 일단 IDE로 돌아 오면 시도 할 것입니다. Indy가 이미 사용하고있는 구성 요소에 내장 된이 기능을 제공하기를 바랍니다. –

+1

다운로드되는 파일이 실제 파일 인 경우 쉽게 인디 – Runner

+2

에 사용자 지정 헤더를 추가 할 수 있습니다, 당신은 ServeFile은()'은'내용을 기입합니다''TIdHTTPResponseInfo.ServeFile()가'클라이언트로 파일을 보내는 데 사용할, 수 - 당신을위한 배치 헤더. 그렇지 않으면 수동으로 'TIdHTTPResponseInfo.ContentDisposition' 속성을 수동으로 채울 수 있습니다 :'AResponseInfo.ContentDisposition : = Format ('attachment; filename = "% s"; ', [TheDesiredFileNameHere]);' –

관련 문제