【问题标题】:ASP.NET - How to convert bytes from database to image and display in brower?ASP.NET - 如何将字节从数据库转换为图像并在浏览器中显示?
【发布时间】:2014-09-16 11:38:20
【问题描述】:

我有数据库和图像数据例如:0xFFD8FFE000104A46494600010100000100010000FFE1018C45786966000049492A0008000000020031010200070000002600000069870400010000002E00000000000000476F6F676C6500000500009007000400000030323230099007000B0000007000000086920700080100007B00000002A00400010000006F02000003A0 P>

我认为它是图像转换为字节。 我的上传代码:

protected void Upload(object sender, EventArgs e)
    {
        FileUpload FileUpload1 = LoginView3.FindControl("FileUpload1") as FileUpload;
        string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
        string contentType = FileUpload1.PostedFile.ContentType;
        string email = User.Identity.Name;

        using (Stream fs = FileUpload1.PostedFile.InputStream)
        {
            using (BinaryReader br = new BinaryReader(fs))
            {
                byte[] bytes = br.ReadBytes((Int32)fs.Length);
                string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
                using (SqlConnection con = new SqlConnection(constr))
                {
                    string query = "insert into tblFiles values (@Name, @ContentType, @Data, @email)";
                    using (SqlCommand cmd = new SqlCommand(query))
                    {
                        cmd.Connection = con;
                        cmd.Parameters.AddWithValue("@Name", filename);
                        cmd.Parameters.AddWithValue("@ContentType", contentType);
                        cmd.Parameters.AddWithValue("@Data", bytes);
                        cmd.Parameters.AddWithValue("@email", email);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                    }
                }
            }
        }
        Response.Redirect(Request.Url.AbsoluteUri);
    }

现在,我必须转换数据库中的数据并在浏览器中显示图像。 我正在寻找有关“image.fromstream”、“图像处理程序”、“base64”的教程和信息,但我不知道我做错了什么。我正在寻找准备好的方法或教程或有关我应该阅读的新信息。 我的sql数据库代码:

CREATE TABLE [dbo].[tblFiles] 
(
[id]          INT             IDENTITY (1, 1) NOT NULL,
[Name]        VARCHAR (50)    NOT NULL,
[ContentType] NVARCHAR (200)  NOT NULL,
[Data]        VARBINARY (MAX) NOT NULL,
[email]       VARCHAR (50)    NOT NULL
);

如果我使用“Image.fromstream”,我将出现此错误“错误 1 ​​'System.Web.UI.WebControls.Image' 不包含 'FromStream' 的定义”或“错误 1 ​​使用命名空间指令可以仅适用于命名空间;'System.Drawing.Image' 是类型而不是命名空间"

我用这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.IO.Stream;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing.Image;

【问题讨论】:

  • Image.FromStream 将很好地解析存储在数据库中的byte[],并为您提供有关图像的元数据,例如“编码是什么?jpg?gif?”或“尺寸是多少?”但如果您所做的只是将其发送回浏览器,您可以考虑直接将流返回给响应。这种方法有点不安全(如果有人以某种方式存储了非图像 byte[] 怎么办?)但如果您不进行图像处理,相信您的输入,并相信浏览器能够安全地解析图像流,那么它可能就足够了
  • 错误1 使用命名空间指令只能应用于命名空间; 'System.Drawing.Image' 是一种类型而不是命名空间

标签: sql asp.net asp.net-mvc


【解决方案1】:

您不能发回 imagbe 对象。这不是 HTML 的工作方式。

您需要为每张图片生成一个 URL,然后将其嵌入 HTML 中,并使用适当的标签显示该图片。

然后调用 URL 时,您会从数据库中返回正确的元数据和图像的字节流。您可以通过处理程序/控制器操作来做到这一点。

但是您不能轻易地将图像嵌入 HTML 中(这种做法是可能的,但实际上是一种不好的做法)并且您不能返回 System.Drawing 或图像或其他东西 - 因为浏览器不是 .NET

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2020-10-15
    • 2013-08-07
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多