Image显示服务器上任意绝对路径下的图片(采用二进制流实现)

所属分类: 网络编程 / ASP.NET 阅读数: 1366
收藏 0 赞 0 分享
我要实现这样一个需求:数据库中存储的是照片所在的绝对路径(可以不在系统所在路径下),Image控件动态加载路径下的图片。

看到这个题目,有些人会说,这还不简单啊,将URL直接设置成绝对路径不就行了啊。我只能说,如果你这样说,那么只能说明你没有经过思考,甚至于,还没有搞清楚Web开发中前台代码和后台代码到底是什么意思,但是这种做法,在自己做的时候(未架到IIS),搜狗浏览器是可以显示图片的(仅此一款可以显示,所以这种做法没有意义)。

Image控件是在System.Web.UI.WebControls命名控件中,所以不能像在winform中那样通过byte[]直接显示图片(个人也有点不太明白这句话,谁如果明白可以解释一下)。找到的这种方法,是采取将图片读取,然后将读进来的二进制流写到一个页面上,然后将Image的URL设置为此页面。下面是我的Demo实现代码。
前台代码:
复制代码 代码如下:

<head runat="server">
<title></title>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
function ShowP(obj) {
$("#Image1")[0].src = "ShowPic.aspx?URL=" + obj.id;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="E:\\1.jpg" type="button" value="button" onclick="ShowP(this);" />
<asp:Image ID="Image1" runat="server" />
</div>
</form>
</body>
</html>

ShowPic.aspx的前台代码为空,下面是ShowPic.aspx的后台代码:
复制代码 代码如下:

public partial class ShowPic : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
#region "根据照片路径,将照片转为二进制数组"
string strUrl = Request.QueryString["URL"];
// 以二进制方式读文件
FileStream aFile = new FileStream(strUrl, FileMode.OpenOrCreate, FileAccess.ReadWrite);
// 创建一个二进制数据流读入器,和打开的文件关联
BinaryReader brMyfile = new BinaryReader(aFile);
// 把文件指针重新定位到文件的开始
brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
//获取照片的字节数组
byte[] photo = brMyfile.ReadBytes(Convert.ToInt32(aFile.Length.ToString()));
// 关闭以上new的各个对象
brMyfile.Close();
#endregion
Response.BinaryWrite(photo);
}
}

在上面我把照片的路径赋给了按钮ID,然后将路径作为参数来调用ShowPic.aspx,在ShowPic的后台代码中,将照片以二维数组的形式写到页面上,如果你直接打开这个页面,会显示乱码。

然后将Image的Url设置为这个页面,此时会显示图片。我通过按钮ID实现了一下动态加载图片,到具体应用,还有一点点传参的小问题,关于JavaScript传参,这个还是需要大家自己做个例子,通过javascript调试工具,来了解dom结构,然后进行操作。
更多精彩内容其他人还在看

.NET Core源码解析配置文件及依赖注入

这篇文章我们设计了一些复杂的概念,因为要对ASP.NET Core的启动及运行原理、配置文件的加载过程进行分析,依赖注入,控制反转等概念的讲解等
收藏 0 赞 0 分享

.NET Corek中Git的常用命令及实战演练

这篇文章将通过故事的形式从Git的历史谈起,并讲述Git的强大之处。然后通过实战演练教你如何在Github以及码云上托管我们的代码并进行代码的版本控制
收藏 0 赞 0 分享

Asp.Net Core WebAPI使用Swagger时API隐藏和分组详解

这篇文章主要给大家介绍了关于Asp.Net Core WebAPI使用Swagger时API隐藏和分组的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Asp.Net Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

如何利用FluentMigrator实现数据库迁移

这篇文章主要给大家介绍了关于如何利用FluentMigrator实现数据库迁移的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

ASP.NET Core利用Jaeger实现分布式追踪详解

这篇文章主要给大家介绍了关于ASP.NET Core利用Jaeger实现分布式追踪的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题

这篇文章主要介绍了ASP.NET Core2.2到3.0可能会遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解.net core webapi 前后端开发分离后的配置和部署

这篇文章主要介绍了.net core webapi 前后端开发分离后的配置和部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁

这篇文章主要介绍了ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

.net 4.5部署到docker容器的完整步骤

这篇文章主要给大家介绍了关于.net 4.5部署到docker容器的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用.net4.5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

.net core并发下线程安全问题详解

这篇文章主要给大家介绍了关于.net core并发下线程安全问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多