2013-07-08 3 views
2

내 웹 사이트에서 파일 업로드를 위해 asp FileUpload 컨트롤을 사용하고 업로드 버튼을 클릭하면 업로드 된 이미지가 텍스트 영역과 함께 표시 될 패널이 표시됩니다 이미지의 설명을 쓰십시오. 설명을 작성한 후 동적으로 생성 된 저장 버튼을 클릭하면 설명과 함께 데이터베이스에 이미지를 저장해야합니다. 이 작업을 수행하는 방법에 대한 아이디어를 제공해주십시오.동적으로로드 된 컨트롤을 통해 데이터베이스에 데이터를 저장하는 방법

<form id="form1" runat="server"> 

    <div class="transbox" id="mainbk" runat="server" style="position:absolute; top:0px; left:0px; width: 100%; height: 100%;" > 
     <asp:FileUpload runat="server" ID="UploadImages" style="background-color:white; position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 350px; right: 251px;" Width="500px" AllowMultiple="true"/> 
     <asp:Button runat="server" ID="uploadedFile" style="position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 870px; width: 112px; height: 29px;" Text="Upload" OnClick="uploadFile_Click" /> 
     <asp:Panel ID="updtpanel" runat="server" CssClass="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute" Visible="false"> 

     </asp:Panel> 
    </div> 


    </form> 

를 다음과 같이 내 백엔드 코드는 다음과 같습니다 :

protected void uploadFile_Click(object sender, EventArgs e) 
    { 
     if (UploadImages.HasFiles) 
     { 
      int tid = 0; 

      string fileExt = Path.GetExtension(UploadImages.FileName).ToLower(); 
      if (fileExt == ".jpeg" || fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp") 
      { 
       HtmlGenericControl d = new HtmlGenericControl("div"); 
       Button btnsave = new Button(); 
       btnsave.Text = "Save"; 


       sb.Append("<div class=" + "\"savback\"" + ">"); 
       sb.Append("<div class=" + "\"head\"" + ">Write Description</div>"); 

       foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles) 
       { 
        id += 1; 
        tid = tid + 1; 
        string textid = "txt" + tid; 
        filepath = Server.MapPath("~/Images/Gallery/" + uploadedFile.FileName); 
        uploadedFile.SaveAs(filepath); 
        newpath = "../Images/Gallery/" + uploadedFile.FileName; 
        try 
        { 
         updtpanel.Visible = true; 

         sb.Append("<div class=" + "\"dataload\"" + ">"); 
         sb.Append("<img class=" + "\"loadimg\"" + "src=" + "\"" + newpath.ToString() + "\"" + " />"); 
         sb.Append("<textarea class=" + "\"txtdes\"" + "id=" + "\"" + textid + "\"" + "></textarea>"); 
         sb.Append("</div>"); 


        } 

        catch (Exception ex) 
        { 
         Response.Write(ex.Message); 
        } 

       } 

       sb.Append("</div>"); 
       d.InnerHtml = sb.ToString(); 

       updtpanel.Controls.Add(d); 
       updtpanel.Controls.Add(btnsave); 
      } 
      else 
      { 
       Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select only Image Files!!');", true); 
      } 

     } 
     else 
     { 
      Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select a File First!!');", true);   
     } 
    } 

을이 업로드 전에 모습입니다 : Before Uploading

을 업로드 한 후이 같이 보입니다 다음과 같이 내 프론트 엔드 코드는 이 After Uploading and before Saving

아래 입력란에 설명을 입력 한 후 데이터베이스에 저장하려면 어떻게합니까? 그는 사진을 올렸다.

페이스 북이 앨범 이미지를 올바르게 업로드하는 방법을 모두 알고 있습니다. 마찬가지로 이미지를 업로드 한 다음 데이터베이스에 저장하고 싶습니다. 페이스 북에서 설명 텍스트 박스는 내가 잘못하지 않았다면 동적으로 생성 될 것입니다. 각 설명 텍스트 상자의 내용을 참조하여 DB에 저장하는 방법. 희망 나는 그것을 분명히하고있다.

+1

저장 버튼을 동적으로 생성하는 특별한 이유가 있습니까? 공개 설정 작업을 전환하지 않으시겠습니까? – Karthik

+0

http://forums.asp.net/p/1895457/5353700.aspx/1?Re+dynamically+created+link+button+s+click+event+not+firing – Karthik

+0

@Karthik .. U 만들었습니다. 디자인 중에는 패널 만 있고 그 안의 다른 것들은 런타임 중에 추가됩니다. 특별한 이유가 없지만 내가 따라야 할 디자인으로 인해 그렇게해야합니다. 흠, 내가 디자인을 바꿀 수 있는지 여부, 그것에 대해 생각할 것입니다. :) –

답변

0

데이터베이스 비전에는 적어도 3 개의 열이있는 테이블이 필요합니다. 먼저 파일을 저장할 BLOB 열이라고 불리는 VARBINARY 열과 파일 확장명을 저장하는 VARCHAR 열 (예 : .gif, .jpeg), 세 번째는 캡션을 저장할 VARCHAR 또는 NVARCHAR 열입니다. 하지만 요점은 응용 프로그램에서 파일을 바이트 배열로 변환 한 다음 varbinary 매개 변수로 SQL Server에 전달해야한다는 것입니다.

private Byte[] getDocumentFormatter(string path) 
     { 
      FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); 
      BinaryReader br = new BinaryReader(fs); 
      Byte[] bytes = br.ReadBytes((Int32)fs.Length); 
      br.Close(); 
      fs.Close(); 
      return bytes; 
     } 

하지만 웹 환경에서 당신은, 당신의 출력 버퍼 또는 내가 파일의 바이트 [] 배열을 얻기 위해 위에서 언급 한 것처럼 당신이 방법 사용을 체결 site.to 당신이있어 어떤 솔루션과 경로를 대체 할 수 있습니다 파일 캡션 및 파일 확장명을 SQL Server의 저장 프로 시저에 전달하십시오.

+0

이미 데이터베이스에 3 개의 열, 즉 slid int PK, slurl varchar, slalt varchar가있는 테이블 "슬라이더"가 있습니다. 나는이 외에 다른 것들을 추가해야합니까 ??? –

+0

예, myFile VARBINARY (MAX) 및 myFileExtension VARHCAR (10)과 같은 두 개의 열을 추가해야합니다. – MAK

+0

내 FileExtension이 필요합니까 ??? –

관련 문제