我正在开发一个Web应用程序。我正在使用WCF Web服务来创建和检索SQL Server数据库中的数据。下面的WCF函数选择col_Photo
列,其类型为VARBINARY(MAX)
,其中包含个人资料图片。当我保存记录并在表格上执行SELECT
查询时,col_Photo
包含上传照片的字节,因此我假设正在保存数据。以下是检索照片的功能:
public byte[] GetPhoto(string account, string id)
{
QueryBuilder builder = new QueryBuilder();
string query = builder.SelectQuery("tbl_" + account + "_details", new List<string> { "col_Photo" }, true, "col_Id", id, false, null, null);
byte[] photo;
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[staffConnectionString].ConnectionString);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
photo = Encoding.ASCII.GetBytes(command.ExecuteScalar().ToString());
connection.Close();
return photo;
}
在这种情况下,QueryBuilder
是一个自动为我构建查询的类。它工作正常。在我的Web应用程序中,我使用以下ActionResult
从数据库中获取照片:
public ActionResult DisplayPhoto(string id)
{
ServiceClient service = new ServiceClient();
service.Open();
byte[] photo = service.GetPhoto(Session[sessionManager.sessionId].ToString(), id);
if (photo != null)
{
service.Close();
return File(photo, "image/png");
}
else
{
service.Close();
return null;
}
}
在我的Razor视图中,我使用以下HTML来显示图像:
<img src="@Url.Action("DisplayPhoto", "Staff", new { id = member.Id })" class="img-thumbnail" />
当我运行Web应用程序时,会返回一些内容,但图像不会显示。当我在浏览器中选择查看图像时,出现以下错误:
无法显示图像,因为它包含错误
调试Web应用程序并在photo
变量上放置Watch后,它不是null
并且包含从数据库中检索的字节。我尝试过返回base64
网址,但这也不起作用。我在这里做错了吗?有什么建议吗?