FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 1511|回复: 1
打印 上一主题 下一主题

关于文件下载

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-6 13:22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在登陆页放了个Window1窗体,然后进行校验密码对了可以下载为失效,如果直接把下载代码放在pageload事件又可以,放在按钮事件一点动静都没有
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using FineUI;

namespace Others
{
    public partial class GetFile : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //DownFile();
            //TransmitFile();
        }


        private void DownFile()
        {

            string fileName = ConfigurationManager.AppSettings["File"];// "项目申报表.docx";
            string filePath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + ConfigurationManager.AppSettings["Path"] + "\\" + ConfigurationManager.AppSettings["File"];
            if (System.IO.File.Exists(filePath))
            {
                //以字符流的形式下载文件
                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();

                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();

                Response.ContentType = "application/octet-stream";
                //通知浏览器下载文件而不是打开
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();
            }


        }


        private void TransmitFile()
        {
            /*
            微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
            下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
            代码如下:
            */
            string fileName = ConfigurationManager.AppSettings["File"];// "项目申报表.docx";
            string filePath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + ConfigurationManager.AppSettings["Path"] + "\\" + ConfigurationManager.AppSettings["File"];
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/x-zip-compressed";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);

            //string filename = Server.MapPath("DownLoad/aaa.zip");
            Response.TransmitFile(filePath);
        }

        private bool CheckLog()
        {
            return true;
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            if (CheckLog())
            {
                Label1.Text = "正在下载请稍后...";
                DownFile();
               // TransmitFile();
                Window1.Hidden = true;
            }
            else
            {
                Alert.Show("用户名或密码错误!");
            }
        }
    }
}
沙发
发表于 2013-8-6 13:48:59 | 只看该作者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-28 08:46 , Processed in 0.044503 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表