2011-07-01 3 views
0

내 호스트는 다음과 같은 구조를 가지고 파일 :저장 파일은

/웹 -> 사이트의 내용 인 경우 /데이터 -> 폴더 권한을 읽기 및 쓰기

방법 파일을 데이터 폴더에 업로드합니까? "~"가/web 디렉토리를 반환하기 때문에 아래 코드는 작동하지 않습니다.

//Save Image 
var serverPath = Server.MapPath(Href("~/Data/") + id); 
Directory.CreateDirectory(serverPath); 
imgOri.Save(Path.Combine(serverPath, fileName)); 

답변

2

Server.MapPath()는 경로를 응용 프로그램의 루트 디렉터리에 매핑하도록 설계되었습니다. 루트 위에 파일을 업로드하려고 시도하면 작동하지 않습니다.

당신은 (호스트가를 제공 할 수있는 경우) 정확한 파일 경로를 지정하여 루트 위의 파일을 업로드 할 수 있습니다

:

var에 해당 ServerPath = "C를 : \ YourFolder 데이터 \ \") + ID);

귀하의 호스트가 루트 디렉토리 외부에서 파일을 업로드 할 수있게되어서 놀랍습니다. 이렇게하는 데 여러 가지 위험이 있으므로 ... 신뢰 문제가 발생할 수 있습니다.

당신은 아래는 Server.MapPath를 사용하여 사이트 루트의 동일한 수준에 앉아 디렉토리의 경로를 얻을 수 있습니다
+0

그러나 이미지를 연결하는 방법은 또는 ridermansb

+0

이미지를 렌더링하려면 핸들러를 만들어야합니다. http://www.dotnetperls.com/ashx –

1

: 루트 이외의 "데이터"디렉토리를 제공하는 데 사용

@{ 
    var root = Server.MapPath("."); 
    var temp = root.Split('\\'); 
    temp[temp.Length - 1] = "Data"; 
    var newpath = string.Join("\\", temp); 
} 

호스팅 회사를 폴더를 Access mdb 데이터베이스와 같은 것들을위한 안전한 장소로 사용하십시오. 사이트의 루트 밖에있는 디렉토리를 직접 찾아 볼 수 없습니다. ASP.NET은 App_Data의 도입으로 이러한 문제에 대한 필요성을 없앴습니다. 요즘에는 이런 종류의 폴더를 사용하고자하는 유일한 이유는 디렉토리의 내용을 제공하기 전에 일종의 인증을 적용하려는 경우입니다. 그런 다음 핸들러를 사용하거나 간단한 cshtml 파일을 사용해야합니다. WebSecurity 도우미와 WebImage 도우미를 결합하여 먼저 사용자를 인증 한 다음 테스트를 통과하면 이미지를 검색하고 표시 할 수 있습니다. img 태그의 src은 쿼리 문자열 또는 UrlData 값과 함께 cshtml 파일을 가리키고 표시 할 이미지를 알 수 있습니다.

이미지를 표시하기 전에 사용자의 유효성을 검사 할 필요가없는 경우 이미지 파일을 루트 외부에 저장하면 불필요한 수준의 복잡성이 추가됩니다.