的FileHandler在asp.net的FileHandler在asp.net(Filehandl

2019-05-12 09:30发布

我需要当PDF在我的web应用程序打开跟踪。 当用户点击链接现在我写一个数据库,然后使用window.open从后面的代码,这是不理想的,因为Safari浏览器拦截弹出式窗口和其他Web浏览器发出警告,当它运行,所以我想一会文件处理器是什么,我需要使用。 我没有使用过的FileHandler过去那么这事,将工作? PDF格式是不以二进制形式,它只是一个静态文件坐在目录。

Answer 1:

创建一个ASHX页面(比ASPX onload事件更快),传递文件的ID作为查询字符串跟踪每个下载

 public class FileDownload : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
        {
            //Track your id
            string id = context.Request.QueryString["id"];
            //save into the database 
            string fileName = "YOUR-FILE.pdf";
            context.Response.Clear();
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
            context.Response.TransmitFile(filePath + fileName);
            context.Response.End();
           //download the file
        }

在你的HTML应该是这样的

<a href="/GetFile.ashx?id=7" target="_blank">

要么

window.location = "GetFile.ashx?id=7";

但我宁愿坚持链路解决方案。



Answer 2:

下面是一个自定义的HttpHandler的一个选项,与使用普通锚标记为PDF:

创建ASHX(右键点击你的项目 - >添加新项 - >通用处理器)

using System.IO;
using System.Web;

namespace YourAppName
{
    public class ServePDF : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string fileToServe = context.Request.Path;
            //Log the user and the file served to the DB
            FileInfo pdf = new FileInfo(context.Server.MapPath(fileToServe));
            context.Response.ClearContent();
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + pdf.Name);
            context.Response.AddHeader("Content-Length", pdf.Length.ToString());
            context.Response.TransmitFile(pdf.FullName);
            context.Response.Flush();
            context.Response.End();
        }

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

编辑Web.config使用您的处理程序为所有的PDF文件:

<httpHandlers>
    <add verb="*" path="*.pdf" type="YourAppName.ServePDF" />
</httpHandlers>

现在的常规线路的PDF文件将使用您的处理程序来记录活动和提供服务的文件

<a href="/pdf/Newsletter01.pdf">Download This</a>


文章来源: Filehandler in asp.net