我创建了一个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
并上传了各种尺寸和格式的各种图像,但无论我做什么,我都得到相同白色图像的输出。我的代码有什么问题?任何更正?
答案 0 :(得分:1)
您可以尝试将图像保存为Base64编码的字符串,然后在希望它在网页上呈现时将其转换回图像。
以下是有关如何操作的链接。
Base64String to Image and visa versa
这是我在项目中使用它的link,不是来自图像或来自数据库,但概念是相同的。
在您的网页中使用我的方法时,您将使用
<img src="${downloadurl}" />
答案 1 :(得分:0)
我在ashx中有这个代码,它可以提取图像数据并从MSSQL数据库中显示它
public void ProcessRequest(HttpContext context)
{
Guid picid;
if (context.Request.QueryString["picid"] != null)
picid = new Guid(context.Request.QueryString["picid"]);
else
throw new ArgumentException("No parameter specified");
context.Response.ContentType = "image/jpeg";
Stream strm = ShowPicImage(picid);
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
}
public Stream ShowPicImage(Guid piciddata)
{
ProductPicture pictureData = new ProductPicture("ProductPictureID", piciddata);
object img = pictureData.Data;
try
{
return new MemoryStream((byte[])img);
}
catch
{
return null;
}
}
我不知道你是否可以尝试解决问题。 (pictureData.Data属性类型是byte [],相关数据库列是varbinary(max))
更新回答
您可能还想考虑将数据作为BLOB存储在数据库中
答案 2 :(得分:0)
255字节的二进制字段类型不足以处理除最微小的图像之外的任何内容。检查要上传的文件的大小,并相应地重新调整字段大小。