c# - 无法将 SQL VARBINARY 正确转换为 byte[] 并在 ASP.NET c# 中转换为 Image
问题描述
这是我正在做的事情:
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" />
我错过了什么?
解决方案
<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");
}
推荐阅读
- python-2.7 - 在 python 中,我如何递归替换字符串中的 % 占位符
- angularjs - ng-src 使用随机生成器显示多个图像 - Ionic 1 / Cordova
- mongodb - 从 js 数组中排除不在我的集合中的项目
- java - 使用 modules=true 配置时,在 SpringBatch 中调用了两次作业
- java - 如何在活动中膨胀菜单
- linux-kernel - 用户缓冲区是否可以始终映射到连续的内核虚拟地址?
- python - 仅绘制正加权边 NetworkX
- amazon-web-services - INACTIVE 任务 - 如何杀死他们
- python - Python 正则表达式拆分
- python - 图工具:如何找到适合某个属性值的顶点?