我似乎无法显示我保存在 asp.net 的 ms 访问数据库中的图像

Posted

技术标签:

【中文标题】我似乎无法显示我保存在 asp.net 的 ms 访问数据库中的图像【英文标题】:I can't seem to display the image that i saved in ms access database in asp.net 【发布时间】:2021-12-28 03:22:26 【问题描述】:

我有一个名为 tbl_studentdetails 的表,其中存储了学生创建个人资料时的详细信息。在该表格中,学生也应该插入个人资料图片。为此,我在我的表中创建了另外 3 个字段,称为 image_name(短文本) img_size(数字), img_data(Ole 对象)。 图像保存在访问数据库中,但是当我尝试在不同的页面上显示它时,它没有被显示。显示没有错误,并且图像数据也正确地从表中获取,但没有显示在屏幕上。

这是我通过将图像转换为字节数组将图像保存在数据库中时的代码。

 protected void btn_create_Click(object sender, EventArgs e)
    
        HttpPostedFile postedfile = FileUpload1.PostedFile;
        String filename = Path.GetFileName(postedfile.FileName);
        String fileextension = Path.GetExtension(filename);
        int filesize = postedfile.ContentLength;

        if(fileextension.ToLower()==".jpg" || fileextension.ToLower() == ".png")
        
            Stream stream = postedfile.InputStream;
            BinaryReader binaryReader = new BinaryReader(stream);
            byte[] bytes = binaryReader.ReadBytes((int)stream.Length);

            con.Open();
            OleDbCommand cmd = new OleDbCommand("insert into studentdetails(s_name,age,phone_no,city,state,email,qualification,field,years_exp,description,image_name,img_size,img_data) values('" + txt_name.Text + "'," + txt_age.Text + "," + txt_phone.Text + ",'" + txt_city_stud.Text + "','" + txt_state_stud.Text + "','" + txt_mail.Text + "','" + ddl_qualifiy.SelectedValue + "','" + txt_field.Text + "'," + txt_years.Text + ",'" + txt_extra.Text + "','" + filename + "'," + filesize+",'"+bytes+"')");
            cmd.Connection = con;
            cmd.ExecuteNonQuery();
            Response.Write("<script>alert('Profile created');</script>");

            con.Close();
            
           // Session["create_smail"] = txt_mail.Text;
            Response.Redirect("~/profilepage.aspx?email=" + txt_mail.Text);

        

这是当我尝试在页面加载时检索并在学生的个人资料页面上显示它时的代码

 create_email = Request.QueryString["email"];
            OleDbCommand cmd = new OleDbCommand("select img_data from studentdetails where email='" + create_email + "'", con);
            byte[] bytes = (byte[])cmd.ExecuteScalar();
            string strbase64 = Convert.ToBase64String(bytes, 0, bytes.Length);
            image1.ImageUrl = "data:image/jpg;base64," + strbase64;

image1是要显示图片的asp:image标签的id。

谁能帮帮我,因为我必须尽快提交一个项目。

【问题讨论】:

【参考方案1】:

对象衬里和嵌入与二进制文件表示非常但非常不同。

该 ole 对象还包括并包含有关要启动什么应用程序以及如何将其嵌入 Access 中的重要信息。

所以如果是 Excel 或 word,或其他什么? Access 在 access 内部创建给定应用程序的“实例”,因此使用它来呈现应用程序 - 与二进制文件几乎没有关系。因此,这类似于使用 HOST 应用程序呈现内容的 ActiveX。所以,那个 ole 对象列比二进制文件数据多得多。太糟糕了,原来的 Access 应用程序没有使用原始二进制文件。但是,无论是谁设置的都没有!如前所述,您可以嵌入 Excel,甚至是 power-point 应用程序。因此,Access 将使用 + 创建基于该信息的应用程序对象。然后应用程序开始工作以呈现所需的“任何”系统或应用程序。这就是 ole 所做的和现在的工作(对象链接和嵌入)。

更糟糕的是,Access 还创建 + 存储原始 BMP 文件来表示缩略图。现在,如果您知道图片压缩有多出色吗?好吧,通常拇指指甲 bmp 比 jpg 或任何图片大得多! (大量 - 所以你必须跳过 bmp 预览图像来获取原始文件 - 而且你还必须跳过上面的 ole 信息!!!)。

因此,您需要代码来忽略并解析(删除)ole 嵌入信息,然后在“混乱”内部,您必须提取原始二进制文件。

这里概述了如何做到这一点:

Convert Access image OLE Object into raw image byte array in C#

【讨论】:

以上是关于我似乎无法显示我保存在 asp.net 的 ms 访问数据库中的图像的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net 将网页响应保存为 PDF

在运行 ASP.NET 的网站中,如何显示存储在 MS Access 2007 附件类型中的图像

似乎无法使用 ASP.NET MVC 和实体框架返回我的模型

ASP.NET Identity 2.1 和 EF 6 - ApplicationUser 与其他实体的关系

使用asp.net mvc在按钮单击成功时查看包消息无法正常工作?

使用 asp.net、vb.net 和 ms-access 的时间戳