2014-10-31 3 views
0

이것은 인덱스보기에서 동작 링크입니다.MVC 컨트롤러에서 다운로드 파일 경로에 오류가 발생했습니다.

@Html.ActionLink("Download File", "Download", new { fileName = Model.OriginalRecordRelativeFilePath }) 


public FileResult Download(string fileName) 
{ 
    try 
    { 
      var fs = System.IO.File.OpenRead(Server.MapPath(ConfigurationHelper.IntegrationInterfaceFolderPath + fileName)); 
    // ConfigurationHelper.IntegrationFolderPath is a path for C:\Data\IntergrationInterface\ 

    return File(fs, "application/octet-stream", fileName); 
} 
catch 
{ 
     throw new HttpException(404, "Couldn't find " + fileName); 
} 

}

나는 C에서 파일을 다운로드하려고 : \ 데이터 \ IntergrationInterface \ 파일 이름을. 그러나 C : \ Data \ IntergrationInterface \ fileName의 경로를 찾을 수없고 예외를 throw 할 수 없습니다 (fileName을 찾을 수 없습니다). 동일한 컴퓨터에서 localhost 웹 서비스를 실행하는 동안 로컬 C에서 파일을 다운로드 할 수있는 방법이 있습니까? 고맙습니다.

+0

예외가 없습니다. 파일이 존재합니까? 가능하면 별도의 변수에 저장하여 경로를 확인하십시오. 이 사이트가 실행되는 사용자는 파일을 읽을 수있는 권한이 있습니까? – CodeCaster

+0

예. 파일이 존재했습니다. C : \ Data \ IntergrationInterface \ path에 path라는 더미 파일을 만들었습니다. 이 사이트의 사용자는 시스템 관리자로 코딩됩니다. 따라서 파일을 읽을 수있는 권한이 있습니다. – AhYap

+0

코드를'string path = ConfigurationHelper.IntegrationInterfaceFolderPath + fileName;으로 변경하십시오. 경로 = Server.MapPath (경로); var fs = System.IO.File.OpenRead (path);'. 각 단계에서 변수를 검사하십시오. – CodeCaster

답변

2

여기서 Server.MapPath를 사용하지 말고 파일 경로를 직접 사용하십시오. 예 : @ "C : \ Data \ IntergrationInterface \".

현재 Server.MapPath (@ "C : \ Data \ IntergrationInterface \ file.txt")를 실행하려고하면 MapPath 메소드가 가상 경로를 예상하는 실제 경로를 제공한다는 의미입니다. 대신 Server.MapPath ("\ ABC")를 지정하면 서버 경로가 "C : \ inetpub \ wwwroot \ ABC"로 반환됩니다.이 경로는 기본적으로 로컬 서버 경로입니다.

관련 문제