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

这是我正在做的事情:


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" />

我错过了什么?


慕仙森
浏览 121回答 1
1回答

FFIVE

<img src=...必须通过其路径指向图像文件,例如<img src="/myImage.jpg">。您不能将图像的二进制表示形式粘贴在其中src并使其正常工作。因此,您可以将这些二进制图像写入磁盘的某个地方(您可能不想这样做,因为那时您正在复制数据,并且必须管理同步)。或者您可以创建某种图像处理程序,因此<img src=类似于: <img src="/myHandler/imageId",然后让处理程序从数据库中读取二进制数据并以图像进行响应。这是我过去用来从数据库中读取二进制 PDF 并将其作为文件返回的 MVC 控制器操作。这是在我的Competition控制器中。如果这是返回图像,您可以将其称为:<img src="Competition/ViewJobDescription?competitionId=1234" />&nbsp; &nbsp; public ActionResult ViewJobDescription(int competitionId)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; string errorMsg = "";&nbsp; &nbsp; &nbsp; &nbsp; var competition = new DBModel.Competition();&nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; competition = DBModel.Competition.GetCompetition(competitionId);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (competition != null && competition.AttachmentContent != null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; byte[] fileData = competition.AttachmentContent;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string filename = competition.AttachmentTitle + ".pdf";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return File(fileData, "application/pdf", filename);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; catch (Exception ex)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMsg += "An error occured: " + ex.Message;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LogFile err = new LogFile();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; err.CreateErrorLog(errorMsg);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ModelState.AddModelError(string.Empty, errorMsg);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return RedirectToAction("Index", "Home");&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP