2011-05-12 7 views
2

디렉토리에서 예외 파일 목록을 표시하는 웹 양식을 작성 중입니다. 파일이 제대로 표시되지만 링크가 작동하지 않습니다. 솔루션에 대한 몇 가지 빠른 검색을 수행했지만 대부분의 솔루션 요청은 가상 디렉터리를 설정하는 것이지만 이러한 파일이있는 서버는 웹 서버가 아닙니다. 파일을 나열하는 코드는 다음과 같습니다.ASP.Net 디렉토리에있는 파일 목록 + 파일에 대한 링크

var exDir = @"\\Server\folder\Exception"; 
     exLabel.Text = ""; 
     foreach (string exFile in Directory.GetFiles(exDir)) 
     { 
      exLabel.Text += @"<a href='file:"+exFile+"'> "+exFile+" </a><br/>"; 
     } 

문제는 "href"내에 있습니다. 가상 디렉터리를 설정하지 않고이 링크를 설정하는 방법이 있습니까? 또는 설치 프로그램을 설치해야한다면 IIS Express를 통해 설치합니까?

+0

http://kb.mozillazine.org/Links_to_local_pages_don%27t_work 문제는 파이어 폭스와 코드에 의한 것입니다 – bananajunk

답변

2

파일이 웹 서버와 동일한 서버에 있지 않으면 가상 디렉터리없이이 작업을 수행 할 수 없습니다. 파일은 웹 서버를 통해 클라이언트에 제공되어야합니다.

IIS Express를 사용하여 가상 디렉터리를 만들 수 있지만 this discussion thread을보십시오. IIS Express에 대한 외부 액세스를 활성화해야 할 수도 있습니다 (이와 관련하여 this post on WebMatrix이 도움이 될 것입니다). 참고 : 가상 디렉터리를 사용하는 경우 URL은 대신 대신 http : 또는 https : 구성표를 사용해야합니다.

또 다른 방법은 공유하려는 파일을 웹 서버의 위치에 업로드하고 웹 서버에서 제공하는 것입니다.

파일 : 로컬 파일 시스템을 참조하는 경우

1

, 당신은 다음과 같이 하이퍼 링크를 포맷해야 /// C :

나는 당신이이 다운로더 서버 측을 사용하여 달성 할 수 있다고 생각
1

/myfile.txt, 그러면 파일을 액세스 할 수 있으며 http를 통해 서비스를 제공 할 수 있습니다. 이 같은이 ProcessRequest 방법 (매우 semplified) 할 수

HttpHandler를, :

var exDir = @"\\Server\folder\Exception"; 
DirectoryInfo dir = new DirectoryInfo(exDir); 

foreach (FileInfo exFile in dir.GetFiles()) 
{ 
    exLabel.Text += @"<a href='downloader.ashx?file="+ exFile.Name + "'> "+exFile.FullName+" </a><br/>"; 
} 

:

public void ProcessRequest(HttpContext context) 
{ 
    if (context.Request.Params["file"] != null) 
    { 
      string filename = context.Request.Params["file"].ToString(); 

     context.Response.Clear(); 
     context.Response.ClearContent(); 
     context.Response.ClearHeaders(); 
     context.Response.Buffer = true; 

     FileInfo fileInfo = new FileInfo(filename); 

     if (fileInfo.Exists) 
     { 
      context.Response.ContentType = /* your mime type */; 
      context.Response.AppendHeader("content-disposition", string.Format("attachment;filename={0}", fileInfo.Name)); 
      context.Response.WriteFile(filename); 
     } 

     context.Response.End(); 
    } 
} 

는 당신이 PARAM으로 파일 핸들러 점에 연결을 구축 할 수 있습니다 의 Web.config의 설정에 핸들러를 기억

<system.web> 
    <httpHandlers> 
     ... 
     <add verb="*" path="downloader.ashx" type="YourNamespace.downloader"/> 
    </httpHandlers> 
</system.web> 

(물론이 샘플은 매우 바보입니다 르 및 오류가 가득 생각하지만, 그냥 방법을 명확히하는 것입니다)

관련 문제