如何通过动态加载的控件将数据保存到数据库

时间:2013-07-08 04:40:23

标签: c# asp.net sql-server file-upload

在我的网站中,我使用asp Fileupload控件上传文件并点击上传按钮,将显示一个面板,其中上传的图像将与textarea一起显示以写入图像的描述。在编写描述之后,我必须将图像与关于动态创建的保存按钮的描述一起保存到数据库中。请介绍一下如何做到这一点。我的前端代码如下:

 <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

请在上传的图片下方的文本框中输入说明后告诉我如何将其保存到数据库中。

  

我知道每个人都知道facebook如何正确上传相册图片。类似地,我想在上传图像后将其保存在数据库中。在Facebook中,如果我没有错,将动态创建描述文本框。他们将如何引用每个描述文本框的内容并将其保存在DB中。希望我说清楚。

1 个答案:

答案 0 :(得分: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;
        }

但是在web环境中你可以用你的输出缓冲区替换路径或你为网站获得的任何解决方案。总结使用我上面提到的方法来获取文件的Byte []数组,然后用文件传递它sql server中存储过程的标题和文件扩展名。