【问题标题】:Image file from SQL data table to asp:Image control从 SQL 数据表到 asp 的图像文件:图像控制
【发布时间】:2014-03-21 09:42:01
【问题描述】:

我在从 SQL 中读取图像并在 asp:Image 控件中可视化时遇到了一些问题。 场景是:

  1. 从本机上传图片

  2. 网站将图片文件转为位数组并保存

  3. 然后从表中读取并解析为具体的asp:Image

我有以下代码:

<asp:Content ID="wrapperContent" ContentPlaceHolderID="wrapper" Runat="Server">

    <asp:Image ID="profileImage" runat="server" ImageUrl="<%=img %>" /><br />

    <asp:Button ID="ChangeImage" runat="server" Text="Change Photo" OnClick="ChangeImage_Click" />

    <asp:FileUpload ID="FileUpload" runat="server" Visible="false" />

    <asp:Button ID="UploadImage" runat="server" Text="Upload Photo" visible="false" OnClick="UploadImage_Click"/>

</asp:Content>

以及后面的代码:

public partial class Details : System.Web.UI.Page
{
    public int id;    
    public Bitmap bitmap;
    public string imgUrl;


    protected void Page_Load(object sender, EventArgs e)
    {   

        if (Session["userName"] != null)
        {
            string sql = "select * from users where username='" + Session["userName"]+"'";
            SqlDataReader sdr = operateData.getRow(sql);
            sdr.Read();
            id = Int32.Parse(sdr["Id"].ToString());

            sql = "select * from profiles where userId='" + id+"'";  
            SqlDataReader sdrPr = operateData.getRow(sql);
            sdrPr.Read();

        SqlConnection con = operateData.createCon();
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter(sql, con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            DataRow row = dt.Rows[0];
            byte[] imgBytes = (byte[])row["img"];
            System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();

            string filePath = Server.MapPath("temp") + "//" + "img" + DateTime.Now.Ticks.ToString() + ".png";
            FileStream fs = File.Create(filePath);
            fs.Write(imgBytes, 0, imgBytes.Length);
            fs.Flush();
            fs.Close();

            profileImage.ImageUrl = filePath;

        }
        else
        {
            Response.Redirect("Login.aspx");
        }       
    }
    protected void ChangeImage_Click(object sender, EventArgs e)
    {
        FileUpload.Visible = true;
        UploadImage.Visible = true;
    }
    protected void UploadImage_Click(object sender, EventArgs e)
    {
        if (FileUpload.HasFile)
        {
        string sql = "update profiles set img='" + img+"' where userId='" + id + "'";
            operateData.execSql(sql);            
        }
    }
}

我想念什么..?我该如何管理它?

【问题讨论】:

  • 您在调试时或在服务器中看到临时文件夹中的任何图像吗?
  • 临时文件夹中没有图像 :(
  • 我希望一些用户会创建用户名';删除表用户:)。在不同的注释上尝试 Server.MapPath("~/temp") 并验证网络服务帐户(如果您的应用程序池在网络服务身份下运行)对 Temp 文件夹具有写入权限。
  • 没听懂..这是学校项目,现在我不必考虑安全问题,如果您是这个意思.. :)
  • 所以你的代码应该有问题

标签: c# asp.net sql image


【解决方案1】:

请尝试以下代码。 在 Web 应用程序图像控件中需要图像相对路径,因此您必须 更改图片网址如下

profileImage.ImageUrl = "img" + DateTime.Now.Ticks.ToString() + “.png”;

protected void Page_Load(object sender, EventArgs e)
        {   

            if (Session["userName"] != null)
            {
                string sql = "select * from users where username='" + Session["userName"]+"'";
                SqlDataReader sdr = operateData.getRow(sql);
                sdr.Read();
                id = Int32.Parse(sdr["Id"].ToString());

                sql = "select * from profiles where userId='" + id+"'";  
                SqlDataReader sdrPr = operateData.getRow(sql);
                sdrPr.Read();

            SqlConnection con = operateData.createCon();
                con.Open();
                SqlDataAdapter sda = new SqlDataAdapter(sql, con);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                DataRow row = dt.Rows[0];
                byte[] imgBytes = (byte[])row["img"];
                System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();

                string filePath = Server.MapPath("temp") + "//" + "img" + DateTime.Now.Ticks.ToString() + ".png";
                FileStream fs = File.Create(filePath);
                fs.Write(imgBytes, 0, imgBytes.Length);
                fs.Flush();
                fs.Close();

                profileImage.ImageUrl = "img" + DateTime.Now.Ticks.ToString() + ".png";

            }
            else
            {
                Response.Redirect("Login.aspx");
            }       
        }

【讨论】:

  • 工作就像一个魅力.. 我想我必须对现在允许上传的文件类型进行一些改进。谢谢!
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2013-12-02
  • 2017-04-29
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多