为了账号安全,请及时绑定邮箱和手机立即绑定

无法将 SQL VARBINARY 正确转换为 byte[] 并在 ASP.NET c# 中转换为

无法将 SQL VARBINARY 正确转换为 byte[] 并在 ASP.NET c# 中转换为

C#
慕仙森 2022-10-15 14:38:53
这是我正在做的事情:public static MVC_Picture GetPictureRecord(int pictureID){    int pictureId = pictureID;    MVC_Picture _picture = new MVC_Picture(); //object that stores name and array    var connString = db.connString;    string cmdText = "SELECT PictureName, PictureImage FROM Picture WHERE CONVERT(INT, ID) =@pictureId;";    using (var connection = new SqlConnection(connString))    {        using (var sqlCmd = new SqlCommand(cmdText, connection))        {            SqlParameter param1 = new SqlParameter();            param1.ParameterName = "@pictureId";            param1.Value = pictureId;            sqlCmd.Parameters.Add(param1);            connection.Open();            SqlDataReader dr = sqlCmd.ExecuteReader();            while (dr.Read())            {                _picture.Id = pictureId;                _picture.PictureName = Convert.ToString(dr["PictureName"]);                _picture.PictureImage = (byte[])(dr["PictureImage"]); //Problem            }            connection.Close();        }    }    return _picture; }当我转换为时,byte[]我得到如下信息:{byte[4354567]}然后我试图将数组转换为Image这样:Image img = (Image)converter.ConvertFrom(_picture.PictureImage);ViewModel.FeaturedImage = img;在视图中我使用:<img src="@ViewModel.FeaturedImage" alt="Featured Image" />我错过了什么?
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

<img src=...必须通过其路径指向图像文件,例如<img src="/myImage.jpg">。您不能将图像的二进制表示形式粘贴在其中src并使其正常工作。


因此,您可以将这些二进制图像写入磁盘的某个地方(您可能不想这样做,因为那时您正在复制数据,并且必须管理同步)。


或者您可以创建某种图像处理程序,因此<img src=类似于: <img src="/myHandler/imageId",然后让处理程序从数据库中读取二进制数据并以图像进行响应。


这是我过去用来从数据库中读取二进制 PDF 并将其作为文件返回的 MVC 控制器操作。这是在我的Competition控制器中。如果这是返回图像,您可以将其称为:


<img src="Competition/ViewJobDescription?competitionId=1234" />


    public ActionResult ViewJobDescription(int competitionId)

    {

        string errorMsg = "";

        var competition = new DBModel.Competition();

        try

        {               

            competition = DBModel.Competition.GetCompetition(competitionId);

            if (competition != null && competition.AttachmentContent != null)

            {

                byte[] fileData = competition.AttachmentContent;

                string filename = competition.AttachmentTitle + ".pdf";

                return File(fileData, "application/pdf", filename);

            }

        }

        catch (Exception ex)

        {

            errorMsg += "An error occured: " + ex.Message;

            LogFile err = new LogFile();

            err.CreateErrorLog(errorMsg);


            ModelState.AddModelError(string.Empty, errorMsg);

        }


        return RedirectToAction("Index", "Home");

    }


查看完整回答
反对 回复 2022-10-15
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信