2009-11-18 7 views
1

저는 웹 사이트를위한 C# 이미지 갤러리를 만들고 있습니다. (저는 많은 자유로운 것들이 있지만 거기에는 많은 경험이 있습니다.) 웹 사이트의 디렉토리에서 배열로 파일을 저장합니다.C# 이미지 갤러리 - 이미지 버튼이 보이지 않습니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     string[] files = null; 

     files = Directory.GetFiles(Server.MapPath(@"Pictures"),"*.jpg"); 

는 그때 (내가 엄지 손가락 손톱으로 사용합니다) Imagebuttons의 배열을 만드는 오전 및 동적으로 웹 양식에 패널로를 추가 해요. 그러나 이미지 단추가 양식에 올바르게 추가되었지만 그림에 작은 사각형/원/삼각형 기호가 표시되어 실제 이미지를로드하지 못합니다.

ImageButton [] arrIbs = new ImageButton [파일. 길이 - 1];

for (int i = 0; i < files.Length-1; i++) 
{ 
    arrIbs[i] = new ImageButton(); 
    arrIbs[i].ID = "imgbtn" + Convert.ToString(i); 
    arrIbs[i].ImageUrl = Convert.ToString(files[i]); 
    Response.Write(Convert.ToString(files[i]) + "**--**"); 
    arrIbs[i].Width = 160; 
    arrIbs[i].Height = 100; 
    arrIbs[i].BorderStyle = BorderStyle.Inset; 
    //arrIbs[i].BorderStyle = 2; 
    arrIbs[i].AlternateText = System.IO.Path.GetFileName(Convert.ToString(files[i])); 
    arrIbs[i].PostBackUrl = "default.aspx?Img=" + Convert.ToString(files[i]); 

    pnlThumbs.Controls.Add(arrIbs[i]); 

} 

}

이되거나 문제와 관련되지 않을 수있다 (관련되지 않은 경우, 서브 문제이다). Server.MapPath()를 @ "~/Gallery/Pictures"(디렉토리가 사이트 루트와 관련이있는 위치)로 설정하면 오류가 발생합니다. "C :/.../.../.../... 찾을 수 없습니다."웹 사이트는 그림이있는 "그림"으로 디렉토리를 설정 한 경우에만 빌드됩니다. "Pictures"는 위 코드가있는 "Default.aspx"와 같은 폴더에 있습니다. 나는 ~ (tilda) 문자로 운이별로 없다. 이것은 파일 구조 문제입니까, 아니면 IIS 문제입니까?

답변

3

이 문제는 이미지 버튼 원본으로 서버의 경로를 설정하고 있다는 것입니다. 브라우저는 클라이언트 컴퓨터에서 이러한 이미지를로드하려고하므로로드 할 수 없습니다. 또한 서버의 ASPNET 사용자에게 해당 폴더에 대한 사용 권한이 있는지 확인해야합니다.

당신이해야 할 일은 jpeg의 스트림을 이미지 버튼의 소스로 제공하는 것입니다.

쿼리 문자열 매개 변수에서 경로를 가져 와서 파일을로드하고 제공하는 aspx 페이지를 가질 수 있습니다. 나는 위의 답변을

arrIbs[i].ImageUrl = String.Format("GetImage.aspx?file={0}", HttpUtility.UrlEncode(files[i])); 
+0

감사 :

<%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <script runat="server" language="c#"> public void Page_Load() { try { Response.Clear(); Response.ContentType = "image/jpeg"; string filename = Page.Request.QueryString["file"]; using (FileStream stream = new FileStream(filename, FileMode.Open)) { int streamLength = (int)stream.Length; byte[] buffer = new byte[streamLength]; stream.Read(buffer, 0, streamLength); Response.BinaryWrite(buffer); } } finally { Response.End(); } } </script> 

당신이 당신의 ImageButtons을 만들 때 지금이 당신의 이미지 URL이어야한다 :

예, 같은 GetImage.aspx라는 페이지가 앞으로는 이것을 확실히 사용할 수있을 것입니다. 그러나 내가 가진 문제는 Visual Studio 2008에서 웹 사이트를 설정했을 때 IIS 구성 (HTTP)이 아닌 파일 구조 (FILE)를 기반으로했습니다. 따라서 "/Images/Pic1.jpg"경로는 내 웹 루트 -> 이미지 -> Pic1.jpg가 아닌 C : 드라이브를 나타냅니다. – contactmatt

+0

@Veli, 위의 정확한 코드를 사용하여 끝내게되었습니다. 나는 당신이 실제 .aspx 페이지로 img 소스를 설정할 수 있다는 것을 몰랐다. 나는 늘 사진 확장이되어야한다고 생각했다. 고마워, 고마워! – contactmatt

+0

도와 줘서 기쁩니다 :) 그러나 나는 이것을 놓치고 싶습니다. HttpHandler를 사용하는 것이 더 우아한 방법 일지는 모른다 : http://dotnetperls.com/ashx-handler –