2015-01-23 2 views
0

안녕하세요. 내 서버의 실제 경로에서 파일을 다운로드하고 싶습니다. 내 응용 프로그램을 통해 물마루 vs2012 자사의 작품 greate 실행, 그리고 내가 실제 경로에서 파일 목록을 참조하십시오. 하지만 서버에 응용 프로그램을 게시 할 때 파일이 목록에 없습니다. 나는 어떤 물리적 경로가 반드시 필요하지만, 파일은 응용 프로그램 패키지 여기IISExpress에 응용 프로그램을 게시 한 후 파일을 다운로드하는 방법

에 저장하지 않아야 코드 :

public ActionResult NIRInfo() 
{ 
    List<string> filesList = new List<string>(); 
    var dir = new System.IO.DirectoryInfo(@"Z:\Docs"); 
    System.IO.FileInfo[] fileNames = dir.GetFiles("*.*"); 
    var xow = from i in db.NIRs where i.Id == id select i.File; 
    foreach (var i in xow) 
    { 
     fileNames = dir.GetFiles(i); 
     foreach (var f in fileNames) 
     { 
      filesList.Add(f.Name); 
     } 
     ViewData["fList"] = filesList; 
    } 
    return View(nir); 

} 

및 클래스 다운로드

public FileResult Download(string Name) 
{ 
    return File(@"Z:\Docs\" + Name, MediaTypeNames.Application.Octet, Name); 
} 

코드의 코드 보기 :

     @{ var fList = ViewData["fList"] as List<string>;} 

         @if (ViewData["fList"] != null) 
         { 
          <table> 
           <div style="border-top: #444444 1px solid"></div> 
           <b style="font-weight: normal">Files: </b> 
           <br /> 
           <div style="border-top: #444444 1px solid"></div> 
           @foreach (var f in fList) 
           { 
            <a href="@Url.Action("Download", "NIR", new { Name = @f })">@f 
             <br /> 
            </a> 
           } 
          </table> 
         } 
+0

코드에서 주소를 하드 코딩하고 있습니다. 서버 측에서도 동일한 경로입니까? –

+0

나는 그것이 경로일지도 모른다라고 생각한다 : 192.xxx.xxx.xxx/Docs/Files – Pushkin

+0

그러면 당신은 무엇을 기대 하느냐? 서버에서 사용할 수없는 잘못된 경로를 선언하고 있습니다. 코드는 당신이 말하고있는 것을 수행하고 있습니다 .. –

답변

0

사용자가 로컬 시스템에서 파일에 대해 지정한 경로 서버의 것과 동일하지 않습니다. 예를 들어 로컬 컴퓨터에서 파일은 "Z : \ Docs"에 있지만 서버에서는 "C : \ Docs"일 수 있습니다.

응용 프로그램에서 위치를 하드 코딩했기 때문에 응용 프로그램에서 위치를 하드 코딩 했으므로 응용 프로그램에서 위치를 하드 코딩 할 수 있습니다. 응용 프로그램에서 위치를 변경 한 다음에 올바른 파일 경로로 다시 게시해야합니다. 서버.

이것은 지루한 과정이므로 web.config에 파일의 위치를 ​​추가하고 web.config의 값을 파일의 경로로 사용하는 것이 좋습니다. 즉, 파일을위한 경로와 함께 서버를 사용하여 사이트를 게시 할 수 있으며 매번 사이트를 다시 게시하지 않고도 web.config의 경로를 조정할 수 있습니다.

web.config의 <appSettings> 섹션에 키를 추가 할 수 있습니다. 같은

<add key="DownloadDocumentsPath" value="C:\Docs" /> 

및 코드에서 당신은 그럼 그냥 이런 식으로 NIRInfo 방법을 변경 것 Web.config의에서 값을 읽을 수 있습니다 : 같은

public ActionResult NIRInfo() 
{ 
    List<string> filesList = new List<string>(); 

    string fileDownloadPath = System.Configuration.ConfigurationManager.AppSettings["DownloadDocumentsPath"]; 

    var dir = new System.IO.DirectoryInfo(@fileDownloadPath); 
    System.IO.FileInfo[] fileNames = dir.GetFiles("*.*"); 
    var xow = from i in db.NIRs where i.Id == id select i.File; 
    foreach (var i in xow) 
    { 
     fileNames = dir.GetFiles(i); 
     foreach (var f in fileNames) 
     { 
      filesList.Add(f.Name); 
     } 
     ViewData["fList"] = filesList; 
    } 
    return View(nir); 
} 

그리고 당신의 다운로드 방식 무언가를 이 :

public FileResult Download(string Name) 
{ 
    string fileDownloadPath =  System.Configuration.ConfigurationManager.AppSettings["DownloadDocumentsPath"]; 
    return File(@fileDownloadPath + Name, MediaTypeNames.Application.Octet, Name); 
} 
+0

ok. 감사. IIS에서 내 앱을 게시하고 게시 한 후 어떻게 파일을 가져올 수 있습니까? – Pushkin

+0

파일에서 다운로드 할 파일이있는 서버의 올바른 경로에 게시글에서 설명한 것처럼 web.config 파일의 경로를 설정 한 경우 그런 다음 응용 프로그램은 디렉토리가있는 경우 파일을 찾아야합니다. 디렉토리가 발견되지 않았던 경우는 Exception가 슬로우됩니다. 그게 당신의 질문에 대답한다면? – Shadowind

+0

예)) 덕분에 많이! – Pushkin

관련 문제