问题:由于相片数据是通过Base64加密之后存储在oracle数据库中的,所以通过接口返回的只是数据流格式的图片信息,而没有固定的图片路径。
没有固定的图片路径,出现的问题是:
1.在浏览器显示的图片没有办法实现右键图片另存为;
2.下载图片的时候没有办法只是提供一个固定的url路径
需求:通过数据流的方式返回的图片,使其在前端中显示,并且能够有一个按钮实现图片的下载。
前端代码:
<div class="pic"> <img src="PicHandler.ashx?id=<%=PictureID %>" alt="" /> <br /> <a class="btn btn-info" href="DownPic.ashx?id=<%=PictureID %>">下载相片</a> </div>
后台处理代码在这里只记录数据流返回的一段:
在图片显示PicHandler.ashx中:
//imgUrl是字符串格式的url Uri myUri = new Uri(imgUrl); WebRequest webRequest = WebRequest.Create(myUri); WebResponse webResponse = webRequest.GetResponse(); Bitmap myImage = new Bitmap(webResponse.GetResponseStream()); MemoryStream ms = new MemoryStream();//创建一个内存流 myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将图片信息保存到内存流中 context.Response.ClearContent(); context.Response.ContentType = "application/octet-stream";//"image/Jpeg"; context.Response.BinaryWrite(ms.ToArray());//响应给浏览器的是byte[]流
点击按钮下载图片时,实现的代码是:
string fileName = "photo.jpg";//客户端保存的文件名 Uri myUri = new Uri(imgUrl); //通过url字符串获取到uri WebRequest webRequest = WebRequest.Create(myUri); WebResponse webResponse = webRequest.GetResponse(); Bitmap myImage = new Bitmap(webResponse.GetResponseStream()); //将请求返回的数据流存储为一张相片 myImage.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); //通知浏览器下载文件而不是打开 context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)); context.Response.ContentType = "image/jpeg"; context.Response.Flush(); context.Response.End();
主要注意点是两个:图片的下载,没有提供固定的图片路径;
1、将图片保存到context.Response.OutputStream中;
2、//通知浏览器下载文件而不是打开
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));
通过这样的方法,可以实现图片的下载 ,但是右键图片另存为这个功能还是使用不了的。
时间: 2024-11-03 18:21:04