科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件asp.net 下载文件Response.TransmitFile(filename)的同时记录文件被下载次数异常

asp.net 下载文件Response.TransmitFile(filename)的同时记录文件被下载次数异常

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

asp.net 下载文件Response.TransmitFile(filename)的同时记录文件被下载次数异常

作者:csdn 来源:csdn 2009年12月14日

关键字: 问答 ASP.NET

  • 评论
  • 分享微博
  • 分享邮件

asp.net 下载文件Response.TransmitFile(filename)的同时记录文件被下载次数异常

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            try
            {
                //Session["userid"] = "adminTest";  //下载文件页面不能用session
                string userid = "";
                userid = Request.QueryString["uid"].ToString().Trim();
                string FileGuid = Request.QueryString["id"].ToString().Trim();
                Guid guid = new Guid(FileGuid);

                string FileServerPath = "";
                FileServerPath = bllfile.GetFilePath(userid, guid).ServerPath;
                if (FileServerPath == "")
                {
                    Response.Write("<font size=3 color=red>没有找到文件!</font>");
                }
                else
                {                   
                    if (!SendFile(FileServerPath))
                    {
                       Response.Write("<font size=3 color=red>下载出错,请与管理员联系!</font>");

                    }
                    else
                    {
                        int k = 0;
                        k = k + bllfile.Update(guid); //这里是去更新文件下载次数+1,但是文件越大下载的时间越长,这里就会多次执行,为什么,而不是只执行一次
                        if (k < 1)
                       {
                           Response.Write("<font size=3 color=red>更新您的下载次数失败</font>");
                        }
                }
            }
            catch (Exception ex)
            {
                Common.LogManager.LogWrite("Inner_ResourceList_DownFile-->Page_Load", ex.ToString());
                Response.Write("<font size=3 color=red>对不起,无法下载文件!</font>");
            }

            Response.End();
        }
    }
    private bool SendFile(string filename)
    {
        bool check;
        try
        {
            Response.Clear();
            Response.ClearHeaders();
            FileInfo f = new FileInfo(filename);

            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

            Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlPathEncode(f.Name));
            Response.TransmitFile(filename);

            check = true;
        }
        catch (Exception ex)
        {
            check = false;
        }
        return check;
    }

k = k + bllfile.Update(guid); //这里是去更新文件下载次数+1,但是文件越大下载的时间越长,这里就会多次执行,为什么,而不是只执行一次,发现这个page_load里的东西好像是循环碰次执行,导致这一句多次执行。难道是Response.TransmitFile(filename);导致的向客户发送数据会多次发送?

 

Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName.Substring(FileName.LastIndexOf('/') + 1), System.Text.Encoding.GetEncoding("utf-8")));
Response.ContentType = "application/octet-stream";
Response.WriteFile("");
Response.End();

 

貌似就 这个方法 Response.TransmitFile(filename); TransmitFile MSDN解释,将文件直接输入HTTP 输出流,不进行缓存也就意味着,文件直接传送到客户端,而不是先缓存好整个文件 传送到客户端因此如果文件过大,就会导致放松请求,以保持文件的下载换成 response.writeFile()试下.

 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章