如何用HttpModule拦截用户下载的文件 出于网站信息安全考虑,我想通过HttpModule处理当用户请求下载word文件里,先将WORD转为PDF并打上水印,然后将转换后的PDF返回给用户 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class SafeDocHttpHandler:IHttpHandler { private HttpRequest Request { get { return HttpContext.Current.Request; } } private HttpResponse Response { get { return HttpContext.Current.Response; } } #region IHttpHandler 成员 public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { SPSite site = SPControl.GetContextSite(context); string userName = context.User.Identity.Name; if (site.RootWeb.CurrentUser != null || (userName != null && userName != string.Empty)) { SPUser curuser = site.RootWeb.CurrentUser; if (userName == string.Empty) userName = curuser.LoginName; if (userName == null || userName == string.Empty || !context.User.Identity.IsAuthenticated) { context.Server.Transfer("/_layouts/login.aspx"); return; } else { string downUserName = SPContext.Current.Web.CurrentUser.Name; string filename = Path.GetFileName(context.Request.PhysicalPath); string exten = Path.GetExtension(filename); //if (exten.Contains(".doc")&&!context.Request.Url.ToString().Contains("/chengguo")) if (exten.Contains(".doc") || exten.Contains(".xls") || exten.Contains(".ppt")) { ws_doc27.WebService_Doc wsdoc = new ws_doc27.WebService_Doc(); wsdoc.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; AttachEntity pdfAttach = new AttachEntity(); bool result = wsdoc.DocToPDF(context.Request.FilePath, downUserName,out pdfAttach); if (result) { context.Response.Clear(); context.Response.ClearHeaders(); context.Response.ClearContent(); context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("ISO-8859-9"); context.Response.ContentType = "application/" + "pdf"; context.Response.Charset = "windows-1254"; context.Response.AddHeader("Content-Length", pdfAttach.Data.Length.ToString()); context.Response.AddHeader("content-disposition", "attachment; filename=\"" + HttpUtility.UrlPathEncode(System.IO.Path.GetFileName(pdfAttach.FileName)) + "\""); context.Response.BinaryWrite(pdfAttach.Data); context.Response.Flush(); context.Response.End(); } else { context.Response.Write("文件无效无法下载!"); context.Response.End(); } } } } } #endregion } 不管多少次多少线程: request.GetResponse().都使用同一个连接同服务器建行通讯,怎么样强制他分开建立连接呢?(解决即赚50元话费) 构造二叉树(c#,答勒我就给分) 拆分字符串 数组与泛型 C#调用外部程序是如何才能得到外部程序的执行进度 如何再c#中跟条码打印机交互? 初学者连接mssql数据库的问题 latex转pdf C#中怎样运行外部exe文件? .net类库中如何表示 synchronized方法?? wince 编写时钟代码 秒针不准问题 【随便说说】SocketTCP酒店通讯接口研究第11贴(第八章—>唤醒)
{
private HttpRequest Request
{
get { return HttpContext.Current.Request; }
}
private HttpResponse Response
{
get { return HttpContext.Current.Response; }
}
#region IHttpHandler 成员
public bool IsReusable
{
get { return false; }
} public void ProcessRequest(HttpContext context)
{
SPSite site = SPControl.GetContextSite(context);
string userName = context.User.Identity.Name;
if (site.RootWeb.CurrentUser != null || (userName != null && userName != string.Empty))
{
SPUser curuser = site.RootWeb.CurrentUser; if (userName == string.Empty)
userName = curuser.LoginName; if (userName == null || userName == string.Empty || !context.User.Identity.IsAuthenticated)
{
context.Server.Transfer("/_layouts/login.aspx");
return;
}
else
{
string downUserName = SPContext.Current.Web.CurrentUser.Name;
string filename = Path.GetFileName(context.Request.PhysicalPath);
string exten = Path.GetExtension(filename); //if (exten.Contains(".doc")&&!context.Request.Url.ToString().Contains("/chengguo"))
if (exten.Contains(".doc") || exten.Contains(".xls") || exten.Contains(".ppt"))
{
ws_doc27.WebService_Doc wsdoc = new ws_doc27.WebService_Doc();
wsdoc.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
AttachEntity pdfAttach = new AttachEntity();
bool result = wsdoc.DocToPDF(context.Request.FilePath, downUserName,out pdfAttach);
if (result)
{
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("ISO-8859-9");
context.Response.ContentType = "application/" + "pdf";
context.Response.Charset = "windows-1254";
context.Response.AddHeader("Content-Length", pdfAttach.Data.Length.ToString());
context.Response.AddHeader("content-disposition", "attachment; filename=\"" + HttpUtility.UrlPathEncode(System.IO.Path.GetFileName(pdfAttach.FileName)) + "\"");
context.Response.BinaryWrite(pdfAttach.Data);
context.Response.Flush();
context.Response.End();
}
else
{
context.Response.Write("文件无效无法下载!");
context.Response.End();
}
}
}
} } #endregion
}