网页文件收费下载应用实现

通过流下载可以验证身份及收费等操作,还能避免路径外漏。

如果视频观看收费也建议使用流分段下载,这样防止文件整体被copy。爱奇艺VIP会员观看视频就是这样干的,分段观看15秒左右一段

1、文件普通下载方式:直接将

网页文件收费下载应用实现_第1张图片

2、通过一般处理程序流下载: 并没有获取到文件本身的路径

网页文件收费下载应用实现_第2张图片

DownLoad.ashx后台代码:

    /// 
    /// DownLoad 的摘要说明
    /// 
    public class DownLoad : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //创建文件读取对象 C:\Users\ykmy\Desktop\缓存\WebApplication2\WebApplication2\js\hdnj01.mp4
            using (FileStream fileReader = new FileStream(@"C:\Users\ykmy\Desktop\缓存\WebApplication2\WebApplication2\js\hdnj01.mp4", FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                //(filename, FileMode.Append, FileAccess.Write,FileShare.Write))
                context.Response.ContentType = "application/octet-stream";
                context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(@"hdnj01.mp4", System.Text.Encoding.UTF8));
                context.Response.AddHeader("Content-Length", fileReader.Length.ToString());
                //指定文件一次读取时的字节长度
                byte[] by = new byte[1024 * 128];//控制速度[128KB]
                int count = 0;
                while (true)
                {
                    //将文件转换为二进制数据保存到内存中,同时返回读取字节的长度
                    count = fileReader.Read(by, 0, by.Length);
                    if (count == 0)//文件是否全部转换为二进制数据
                    {
                        break;
                    }
                    //将二进制数据转换为文件对象并保存到指定的物理路径中
                    context.Response.OutputStream.Write(by, 0, by.Length);
                    try
                    {
                        context.Response.Flush();
                        
                    }
                    catch
                    {
                        context.Response.Close();
                    }
                }
                context.Response.Close();
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
3、直接post通过网页下载 同上(属于流下载)

网页文件收费下载应用实现_第3张图片

以上有错请指正,并非特别专业

你可能感兴趣的:(c#实现)