出于网站信息安全考虑,我想通过HttpModule处理当用户请求下载word文件里,先将WORD转为PDF并打上水印,然后将转换后的PDF返回给用户

解决方案 »

  1.   

    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
        }