所以,我从Oracle获取LongRaw图像的字节数组... 我正在使用webapi。获得阵列后,我如何在客户端使用它? 做得更好我转换为base64string并在客户端传递此值转换?
cmd.InitialLONGFetchSize = -1;
var reader = cmd.ExecuteReader();
if (reader.Read())
{
// Fetch the LONG RAW
OracleBinary imgBinary = reader.GetOracleBinary(0);
// Get the bytes from the binary obj
byte[] imgBytes = imgBinary.IsNull ? null : imgBinary.Value;
//var imgString = Uri.EscapeDataString(Convert.ToBase64String(imgBytes));
}
//CRIO A LISTA
lretorno.Load(reader, LoadOption.OverwriteChanges, "BUSCAFOTO");
reader.Close();
connection.Close();
connection.Dispose();
var teste = lretorno.Tables[0].AsEnumerable().Select(row => new FotoEnvolvido
{
FOTO = (byte[])(row["FOTO"]),
//FOTO = Convert.ToString(row["FOTO"]),
});
return teste;
答案 0 :(得分:2)
您可以编写一个Web API Controller来返回图像的二进制数据。 Base64字符串强加了必须传输的字节数的开销。请避免这种情况。
示例控制器可以如下所示:
public class WebApiController : ApiController
{
public async Task<HttpResponseMessage> Get(string id)
{
var bytes = await GetBytesFromDataLayerAsync(id);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream(bytes);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("image/jpeg");
return result;
}
private async Task<byte[]> GetBytesFromDataLayerAsync(string id)
{
// put your Oracle logic here
return ...
}
}
答案 1 :(得分:1)
根据您的做法,rboe表示将字节直接写入客户端将节省一些数据大小(约37%)和计算开销。如果您不仅要显示jpeg图像,还应将mime-type设置为正确的值...请查看this source以获得一组相当完整的mime类型映射扩展。如果您不知道mime类型,您可以尝试&#34; application / octet-stream&#34;因为这是二进制数据的一般mime类型。
如果您通过网络浏览器显示内容,则可以使用<img>
标记,例如<img src="view_image.aspx?id=5">
,您甚至可以使用javascript / jQuery动态创建。
如果你确实想要嵌入json请求中的图像数据,如果你有很多小图标并且不需要大量的请求(http / 2我不喜欢),这可能会很有用认为这很重要)或其他原因,然后是首先使用...
编码二进制数据string base64EncodedData = Convert.ToBase64String(bytes);
如果客户端是javascript,您可以使用最新的浏览器本机功能进行解码
var decodedImageData = window.atob(base64EncodedData);
请参阅:
如果您只是将其发送到另一个c#端点,则可以使用...
byte[] decodedImageData = Convert.FromBase64String(base64EncodedData);
就像我在评论中提到的那样,为了确保它的加密只是让网站只支持https://如果您没有SSL证书,您可以免费获得一个{{3 }}