首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
直接把字符串输出到客户端供下载
所属栏目:ASP.NET(webform)  时间:2009-04-30 13:15  作者:狼子

我要实现的功能是从数据库中读取需要的数据出来,然后呢,生成一个文件给用户下载。就是,因为不想在服务器端留下文件,所以我把读出来的数据用StringBuilder组成字符串后,直接发送到客户端给用户下载了。

private void DownLoadText(string text)
    {
        bool ok = true;
        string fileName;
        fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".gbpt";
        try
        {
            Response.ClearHeaders();
            Response.ContentType = "application/zip;";
            Response.Charset = "UTF-8";
            Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", fileName));
            Response.BinaryWrite(Encoding.Default.GetBytes(text));
        }
        catch (Exception ex)
        {
            ok = false;
            Response.Write("生成文件失败:" + ex.Message + ",请稍后再试。");
            CreateGbpt(fileName, text);
        }
        if (ok)
        {
            Response.End();
        }
    }

下面是一开始时先生成文件再下载的办法:

#region 把字符串写成文件
    private void CreateGbpt(string fileName, string text)
    {
        bool ok = true;
        string filePath;

        filePath = Server.MapPath(fileName);

        Encoding code = Encoding.GetEncoding("utf-8"); //定义编码

        try
        {
            using (StreamWriter sw = new StreamWriter(filePath, false, code))
            {
                sw.Write(text.Trim());
                sw.Flush();
            }
        }
        catch (DirectoryNotFoundException ex)
        {
            ok = false;
            Response.Write("写入文件出错:" + ex.Message);
        }

        //文件写入成功,下载文件
        if (ok)
        {
            DownLoadFile(fileName);
        }
    }
    #endregion

    #region 下载文件
    private void DownLoadFile(string fileName)
    {
        bool ok = true;
        if (System.IO.File.Exists(Server.MapPath(fileName)))
        {
            try
            {
                Response.ClearHeaders();
                Response.ContentType = "application/zip;";
                Response.Charset = "UTF-8";
                Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", fileName));
                Response.BinaryWrite(GetFileBytes(fileName));
            }
            catch (Exception ex)
            {
                ok = false;
                Response.Write("文件不能提供下载,请手动点击下载。" + ex.Message);
            }
            if (ok)
            {
                File.Delete(Server.MapPath(fileName));
                Response.End();
            }
            else
            {
                HypFile.NavigateUrl = fileName;
                HypFile.Text = "生成文件:" + fileName + ",请点击下载";
            }
        }
    }
    private byte[] GetFileBytes(string fileName)
    {
        try
        {
            using (System.IO.FileStream fileStream = new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(fileName), System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                byte[] bytes = new byte[fileStream.Length];
                fileStream.Read(bytes, 0, (int)fileStream.Length);
                return bytes;
            }
        }
        catch
        {
            return null;
        }
    }
    #endregion

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17