【问题标题】:Failed to load Image from database无法从数据库加载图像
【发布时间】:2012-07-10 21:50:25
【问题描述】:

我使用 ajaxFileUploader 和 2 个处理程序进行文件上传和下载。

ajaxFileUploader 代码:

    $.ajaxFileUpload
    (
        {
            url: 'AjaxFileUploader.ashx?user=' + userId,
            secureuri: false,
            fileElementId: 'uploadControl',
            dataType: 'json',
            data: '{}',
            success: function (mydata) {

                alert("Image Successfully Uploaded");

                $('#imgdefaultphoto').attr('src', 'ImageRetrieval.ashx?user=' + userId);
            },
            error: function () {

            }
        }
    )

AjaxFileUploader.ashx 代码:

    public void ProcessRequest(HttpContext context)
    {

        if (context.Request.Files.Count > 0)
        {
            string path = context.Server.MapPath("~/Temp");
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);

            var file = context.Request.Files[0];

            string userid = context.Request.QueryString["user"];

            string fileName;

            if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")
            {
                string[] files = file.FileName.Split(new char[] { '\\' });
                fileName = files[files.Length - 1];
            }
            else
            {
                fileName = file.FileName;
            }
            string fileType = file.ContentType;
            string strFileName = fileName;

            int filelength = file.ContentLength;
            byte[] imagebytes = new byte[filelength];
            file.InputStream.Read(imagebytes, 0, filelength);

            DBAccess dbacc = new DBAccess();
            dbacc.saveImage(imagebytes, userid);

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            var result = new { name = file.FileName };
            context.Response.Write(serializer.Serialize(result));

        }

ImageRetrieval.ashx 代码:

     public void ProcessRequest(HttpContext context)
    {

        string userId = HttpContext.Current.Request.QueryString["user"];

        if (userId != null)
        {
            DBAccess dbacc = new DBAccess();

            DataTable dt = dbacc.getImage(userId);

            context.Response.ContentType = "image/png";

            context.Response.BinaryWrite((byte[])dt.Rows[0]["UserImage"]);

            context.Response.Flush();
        }
        else
        {
            context.Response.Write("No Image Found");
        }
    }

图片正在上传到数据库,但是当我尝试加载它并将其附加到我的 img 标签时,图片标签显示损坏的图片。我不知道是什么原因导致或似乎是问题所在。任何帮助将不胜感激。谢谢!

编辑了一些行。还是没有运气。

【问题讨论】:

  • 代码对我来说看起来不错,你能验证 ajax 调用 F12 在 chrome 中发生了什么吗,你在那里得到正确的结果并使用 context.Response.Flush();二进制写入后。
  • 糟糕!忘了做f12。我有一些错误。加载资源失败:服务器响应状态为 404(未找到)。处理程序的名称与 .attr src 冲突。改了,还是一样的错误。
  • 那么你的处理程序没有注册。
  • 未注册是什么意思?
  • 最后。我重新创建了处理程序并且它工作但我有一个转换错误。将参数值从 String 转换为 Byte[] 失败。似乎是什么问题?

标签: jquery ajax uploading handlers


【解决方案1】:

根据您的最后一句话,试试这个:

var img = dt.Rows[0]["UserImage"];
byte[] imagebytes = img.ToArray();
context.Response.BinaryWrite(imagebytes);

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

【讨论】:

  • 你存储图片的数据库列类型是什么?
  • 发生在哪一行错误?在处理程序或 saveImage 部分,您需要查看您的数据库函数。从您发布的代码中,我认为没有问题。祝你好运。
  • 没有错误了。但显示的是一个损坏的图像图标。
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多