2017-09-19 14 views
1

ASP.NET Core 2.0 웹 응용 프로그램에서 정적 파일을 사용하려고합니다. wwwroot 폴더 외부에있는 updater라는 폴더에 여러 파일이 있습니다. 그들에게 접근 내가이 다른 프로그램의 URL을 호출하여 파일을 얻을 수 있기를 할 수 있습니다asp.net 코어의 정적 파일

app.UseStaticFiles(new StaticFileOptions() 
{ 
    ServeUnknownFileTypes = true, 
    FileProvider = new PhysicalFileProvider(
     Path.Combine(Directory.GetCurrentDirectory(), @"TestUpdater") 
    ), 
    RequestPath = new PathString("/Updater") 
}); 

을 추가 허용합니다. 문제는 모든 파일을 서비스 대신 다운로드해야한다는 것입니다. 하나의 txt 파일이 있습니다. 다운로드 대신 다운로드 만 허용하려면 어떻게해야합니까?

답변

2

아래의 대답은 의도 한 효과를 제공하지만, 사용할 적절한 헤더는 Content-Disposition입니다. 하나 개의 인스턴스에서 브라우저의 임시 위치로 파일을 다운로드하고 창에 표시한다는 것입니다


"봉사"와 "다운로드"파일 당신이 설명하는대로 사이의 유일한 차이 (application/octet-stream documentation 참조) 다른 동안 브라우저는 사용자에게 영구적 인 위치에 파일을 저장할 위치를 묻습니다.

당신이 말하는 다른 프로그램이이 파일에 대해 서버에 직접 연결하는 경우 중요하지 않습니다. 예를 들어 HttpClient를 사용하면 정적 파일 미들웨어를 전혀 변경할 필요가 없습니다.

인식 된 콘텐츠 형식이더라도 브라우저에서 파일을 저장하라는 메시지를 표시하려면 Content-Type 응답 헤더를 "application/octet-stream"으로 설정하십시오. Startup.cs 구성에서이 작업을 수행하려면 StaticFileOptions를 다음과 같이 사용하도록 수정하십시오.

new StaticFileOptions() 
{ 
    OnPrepareResponse = context => 
    { 
     context.Context.Response.Headers["Content-Type"] = "application/octet-stream"; 
    } 
} 
+0

그렇습니다. 실제로 거기에 php 파일도 있는데, 실행해야합니다. "서빙"이 문제라고 생각했습니다. 문제는 여전히 지속됩니다. 정적 PHP 파일을 실행할 수있게하려면 특별히 필요한 작업이 있습니까? – Ratan

+0

@Ratan PHP는 파일을 실행해야합니다. PHP를 서버에서 실행하고 있습니까? (이것은 매우 이상한 아키텍쳐처럼 들립니다.) – Eilon

+0

예, 동일한 서버의 비 핵심 사이트에서 제공 될 때 파일이 실행될 때 PHP가 실행 중입니다. 예, 동의합니다. 나는 미래에 그것을 바꿀 계획이지만 현재는 비 코어를 코어로 업그레이드하고 이전 파일을 실제로 거기에서 옮길 때까지 일부 오래된 파일을 유지할 필요가 있기 때문에 당장은 할 수 없습니다. – Ratan