我在网络开发方面有点新,我无法实现我想要做的事情。
我有一个名为“PI_Banners”的数据库,我存储了一些图像。此表存储ID和包含图像二进制数据的VARBINARY列。
我正在尝试做的是使用对C#函数的Ajax请求检索该数据,并使用数据URI方案创建“img”标记。然后将新图像附加到div
这就是我得到的:
Ajax电话:
$(document).ready(function() {
var dto = {};
var dtoJSON = JSON.stringify(dto);
$.ajax({
async: false,
url: 'BannerRotativo.aspx/devuelveBanners',
cache: false,
dataType: 'json',
type: "POST",
data: dtoJSON,
contentType: "application/json; charset=utf-8",
success: function(data, textStatus, jqXHR) {
responsedevuelveBanners(data);
},
error: errorResponse
});
});
成为“devuelveBanners”的C#函数。
C#代码:
public static string devuelveBanners()
{
DataReader DR;
DR = listaBanners();
//armaJson creates the Json string from the DataReader.
string strJson = GENERAL.armaJson(DR);
return strJson;
}
public DataReader listaBanners()
{
try
{
string strComando;
sqlCommand SQLC;
DataReader DR;
strComando = "SELECT banner_img FROM PI_Banners";
//sqlCon is the connection, and is open already.
SQLC = new System.Data.SqlClient.SqlCommand(strComando, sqlCon);
SQLC.CommandType = CommandType.Text;
DR = SQLC.ExecuteReader();
return DR;
}
catch (Exception ex)
{
throw ex;
}
}
当我解析Json字符串并创建图像时:
function responsedevuelveBanners(data)
{
var datos = JSON.parse(data.d);
$("#imgContainer").append("<img src='data:image/jpg;base64," + datos.Rows[0].Row[0].banner_img + "' />");
}
图片已创建但未显示,因为它有以下网址:
data:image/jpg;base64,System.Byte[]
我知道我正在做一些非常错误的尝试以这种方式检索json数据,但我不知道如何实现这一点!
提前致谢!
答案 0 :(得分:2)
为了使用<img src="data:image/PNG;base64'
,base64
部分是因为您需要返回Base64
字符串而不是字节数组,因此您需要将byte[]
转换为64Base使用:Convert.ToBase64String(buffer)
所以使用你的代码作为例子:
ImageConverter imageConverter = new ImageConverter();
byte[] resourceByteArray = (byte[])imageConverter.ConvertTo(_YourObj.GetImage(), typeof(byte[]));
您的WebApi方法应该返回:
return Convert.ToBase64String(resourceByteArray);