2012-09-10 4 views
0

현재 저는 ASP.Net MVC 3 인 문서 관리 시스템 프로젝트 기술을 사용하고 있습니다. 내 하드 드라이브 (C :, D : E : 요법)의 폴더에있는 PDF 문서를 표시하고 싶습니다. 나는 <embed> 태그를 시도했다. 그러나 그것은 작동하지 않았다. 그것은 내 프로젝트 내부의 파일을 위해 일했습니다. 또한 나는 그 pdf를 다운로드하고 읽을 필요가 없다. 나는 내 견해에 어딘가에 그것을 dispaly 할 필요가있다.브라우저의 외부 폴더에 PDF 문서를 표시하는 방법

이 코드 세그먼트를 보았습니다. 하지만 난 이걸 사용하는 방법을 모르겠다.

public FileResult GetFile(string fileName) 
{ 
    Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName + ";"); 
    string path = AppDomain.CurrentDomain.BaseDirectory + "App_Data/";    
    return File(path + fileName, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName); 
} 

누군가가 나를이 문제를 해결하는 데 도움이 될 수 있습니다. 감사합니다.

답변

0

컨트롤러 클래스는 File입니다. 이렇게하면 PDF가 브라우저로 반환됩니다. SomeMethodToGetFullPathFromFileName 가정

public ActionResult GetFile(string fileName) 
{ 
    string fullPathToFile=SomeMethodToGetFullPathFromFileName(fileName); 
    return File(fullPathToFile,"application/pdf","someFriendlyName.pdf") 
} 

당신은 파일에 대한 전체 (물리적) 경로를 얻을 수 Server.MapPath 방법을 사용할 수있는 PDF 파일

의 전체 경로를 반환하는 방법이다. 브라우저에서이를 표시 할 경우

, 당신은

yoursitename/someControllername/getfile?fileName=somepdffilenamehere 
+0

파일을 다운로드했습니다. 나는 저 "보기"에서 저 pdf를 표시 할 필요가있다. – Krishan

+0

어디로 다운로드 했습니까? 어떻게? – Shyju

0

당신이 보여준 코드는 App_Code 폴더에서 파일을 제공하는 컨트롤러 액션을 나타냅니다처럼 액세스 할 수 있습니다. 하드 드라이브의 임의의 위치에서 파일을 검색하는 것은 엄청난 보안 취약점 일 것입니다. 그래서 나는이 접근 방식을 고수 할 것을 권합니다. 그러나이 코드에는 여전히 결함이 있습니다. 악의적 인 사용자는 특수하게 조작 된 URL을 사용하여 하드 드라이브에 임의의 파일을 표시 할 수 있습니다. 이것은 다음과 같은 조치를 고정 할 수 있습니다 :

public ActionResult GetFile(string file) 
{ 
    var appData = Server.MapPath("~/App_Data"); 
    var path = Path.Combine(appData, file); 
    path = Path.GetFullPath(path); 
    if (!path.StartsWith(appData)) 
    { 
     // Ensure that we are serving file only inside the App_Data folder 
     // and block requests outside like "../web.config" 
     throw new HttpException(403, "Forbidden"); 
    } 

    if (!System.IO.File.Exists(path)) 
    { 
     return HttpNotFound(); 
    } 

    return File(path, MediaTypeNames.Application.Pdf); 
} 

을 지금이 컨트롤러 액션에 연결하기 위해 embed 태그를 사용할 수 있습니다 당신이 원하는 경우

<object data="@Url.Action("GetFile", "SomeController", new { file = "test.pdf" })" type="application/pdf" width="300" height="200"> 
    alt : @Html.ActionLink("test.pdf", "SomeController", "Home", new { file = "test.pdf" }) 
</object> 

또는 iframe :

<iframe src="@Url.Action("GetFile", "SomeController", new { file = "foo.pdf" })" style="width:718px; height:700px;" frameborder="0"></iframe> 
관련 문제