c# - 从数据库存储和检索图像

原文 标签 c# asp.net image-processing

我创建了一个ASP.NET/C#应用程序,将图像上传到MySQL数据库。该过程执行没有任何错误,但是对于我上传的任何图像,我都得到100x100白色图像的输出。我遵循的过程是。

1)使用字段picture创建数据库,并键入Binary(255)

2)将图片上传为cmd.Parameters.Add("@picture", OdbcType.Binary, 255).Value = FileUpload1.FileBytes;

3)正在插入新记录之上,并且生成了以下某种值。
89504e470d0a1a0a0000000d49484452000002600000010008020000009b155d400000100049444154789cd4dc05745b57a2377a15c26088d99651b2248b999959b2c0966cc9cccccc8e1ddb01439899d3a4499a869999e33037d0340d34d4b4d5dbaee7e6f6b5337367eefad67bf3adf55f676dd98e221f6b9ddffeef738e20db5cbf826c77fd3638d8eafa6587ebd79daedfc0f6afd9eefae5ab372fd6bf7db9e5e7b7075dae4daf5e1c76b98ebb5cfb7ef935a5b31b028b32ea53f6ec3a77efe60fb919156e34222b297ee3aedd2e97ebe6dd870b96acd8b0efc0891bb76ae7ce8ba9a8dc70f1f2c917afaeb95ce75c1f276cd988b0180329c4c4aaf2d2

// ---------------上传模块完成----------------- //

1)创建了一个ASPX页面

<asp:Image ID="img" runat="server" ImageUrl="~/MyImage.ashx" />

2)左ASPX.CS文件,没有任何代码

3)添加了一个ASHX文件

<%@ WebHandler Language="C#" Class="MyImage" %>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Drawing.Imaging;

public class MyImage : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/png";
        var data = "89504e470d0a1a0a0000000d49484452000002600000010008020000009b155d400000100049444154789cd4dc05745b57a2377a15c26088d99651b2248b999959b2c0966cc9cccccc8e1ddb01439899d3a4499a869999e33037d0340d34d4b4d5dbaee7e6f6b5337367eefad67bf3adf55f676dd98e221f6b9ddffeef738e20db5cbf826c77fd3638d8eafa6587ebd79daedfc0f6afd9eefae5ab372fd6bf7db9e5e7b7075dae4daf5e1c76b98ebb5cfb7ef935a5b31b028b32ea53f6ec3a77efe60fb919156e34222b297ee3aedd2e97ebe6dd870b96acd8b0efc0891bb76ae7ce8ba9a8dc70f1f2c917afaeb95ce75c1f276cd988b0180329c4c4aaf2d2";
        var buffer = StringToByteArray(data);
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    }

    private byte[] StringToByteArray(string hex)
    {
        return Enumerable
            .Range(0, hex.Length)
            .Where(x => x % 2 == 0)
            .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
            .ToArray();
    }
    public bool IsReusable
    {
        get { return false; }
    }
}


通过执行此代码,任何彩色输入的输出都将显示100x100白色图像。我仔细检查了ContentType并上传了各种大小和格式的各种图像,但是无论如何我都得到相同的白色图像输出。我的代码有什么问题?有更正吗?

最佳答案

您可以尝试将图像另存为Base64编码的字符串,然后在希望将其呈现在网页上时将其转换回图像。

这是有关操作方法的链接。

Base64String to Image and visa versa

这是我在项目中的用法的link信息,并非完全来自图像或数据库,而是概念相同。

在网页上使用我的方法时,您将使用

<img src="${downloadurl}" />

相关文章:

c# - 保存添加额外的小数位

c# - 使用C#在数据逻辑存储设备上按下扫描按钮时的备用事件

asp.net - 使用ASP.NET 3.5生成SEO友好URL的最佳和最简单的方法是什么

c# - EF使用新引用更新现有实体,并获得违反UNIQUE KEY约束的情况

c# - log4net何时登录?

asp.net - 如何从RouteData获取路线名称?

c# - 从数据库填充许多控件(体系结构和性能问题)

image-processing - 全局池有什么作用?

opencv - 二进制镜像中磁盘的半径

java - 我试图在处理(Java)中使用旋转和投影矩阵在2D中渲染3D对象(立方体)