上传图片到任意指定地址并显示(其地址不在虚拟地址内)

由于上传的图片由其他组件上传,且不在虚拟地址对应的物理地址内,这样给图片的显示带来了问题,因为图片的显示控件不能为其指定绝对地址(出于安全考虑),所有即使为其指定了绝对地址也无法显示,所以下面使用一般处理程序解决该问题:

创建一个Image.ashx文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using XianXian.Model;
using System.IO;

namespace XianXian.Web.Manager
{
/// <summary>
/// Image 的摘要说明
/// </summary>
public class Image : IHttpHandler
{

//配置文件中的目录地址
private string fileServerPath = System.Configuration.ConfigurationManager.AppSettings["BossYouFile"].ToString();
public void ProcessRequest(HttpContext context)
{
if (context.Request["file"] != null)
{
string file = context.Request["file"].ToString();
string filepath = fileServerPath +"\\"+ file.Replace('/','\\');//通过拼接得到绝对地址
if (File.Exists(filepath))
{
byte[] data = File.ReadAllBytes(filepath);
context.Response.OutputStream.Write(data, 0, data.Length);//直接输出图片数据
}
}
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

asp.net代码如下:

....

<div style="float: right; width: 220px; height: 182px; text-align: right;">
<div style="float: none; width: 170px; height: 148px; border: 1px gray; padding-right: 50px;">
<asp:Image ID="imgUserGravatar" runat="server" Width="140px" Visible="true" Height="148px"
ImageUrl="../Manager/Image/defaultpicture.jpg" CssClass="userpicture" /><!--这里是一个默认图片,它会被实际显示的图片替换掉-->

</div>
<div style="text-align: left; height: 17px; margin-top: 10px; margin-left: 8px; position: relative;">
<asp:FileUpload ID="FileUploadIMG" runat="server" CssClass="cssfileupload" Width="180px"
size="15px" Height="17px" />

</div>
</div>

....

asp.net后台代码如下:

....

//这里使用了文件的异步上传:

UploadFileClass ufc = new UploadFileClass(userInfo, imgUserGravatar, userGravatar, data, data.LongLength);

....

//UploadFileClass 该类的定义如下(嵌套类):

//首先定义代理

private delegate int AsyncUploadFile(string path, byte[] data, long sendedsize, long length);

class UploadFileClass
{
private EnterpiseUserInfo fileuserInfo;
private Image fileimage;
private string filepath;
private byte[] filedata;
private long filelength;
public UploadFileClass(EnterpiseUserInfo userinfo, Image image, string path, byte[] data, long length)
{
fileuserInfo = userinfo;
fileimage = image;
filepath = path;
filedata = data;
filelength = length;
FileBLL fileBll = new FileBLL();
AsyncUploadFile auf = new AsyncUploadFile(fileBll.Upload);
auf.BeginInvoke(filepath, filedata, 0, filelength, UploadFileCallBack, auf);
}

/// <summary>
/// 文件上传
/// </summary>
/// <param name="ar"></param>
private void UploadFileCallBack(IAsyncResult ar)
{
AsyncUploadFile dlgt = ar.AsyncState as AsyncUploadFile;
try
{
int result = dlgt.EndInvoke(ar);
if (result >= 0)
{
fileuserInfo.UserGravatar = filepath;

fileimage.ImageUrl = "Image.ashx?file=" + filepath;//这里是本篇文章的核心
}
else
fileuserInfo.UserGravatar = "";
}
catch
{
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值