• HttpResponse输出文件


    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="布局.WebForm3" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID ="btnExport" runat ="server" Text ="导出" 
                onclick="btnExport_Click" />
        </div>
        </form>
    </body>
    </html>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    namespace 布局
    {
        public partial class WebForm3 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void btnExport_Click(object sender, EventArgs e)
            {
                try
                {
                    List<FileInfo> fileList = new List<FileInfo>();
                    string fileName1 = @"D:Export新建 Microsoft Office Excel 工作表1.xlsx";
                    string fileName2 = @"D:Export新建 Microsoft Office Excel 工作表2.xlsx";
                    fileList.Add(new FileInfo(fileName1));
                    fileList.Add(new FileInfo(fileName2));
    
                    string fileName = "Export_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip";
                    //调用方法
                    string targetZipFilePath =Server.MapPath("/")+ "Export\" + fileName;// 扩展名可随意
                    //压缩csv文件
                    FileCompression.Compress(fileList, targetZipFilePath, 5, 5);
    
                    //把压缩文件输出到浏览器
                    System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
                    Response.Clear();
                    Response.ContentType = "application/zip";
                    Response.AddHeader("Content-Disposition", "attachment; FileName=" + HttpUtility.UrlEncode(fileName));
                    Response.BinaryWrite(File2Bytes(targetZipFilePath));
                    Response.OutputStream.Flush();
                    Response.OutputStream.Close();
                    Response.End();//这句代码不能少,否则可能导致输出的文件数据不全,导致解压时出现压缩格式未知的错误
    
                    //删除产生的压缩文件
                    try
                    {
                        FileInfo fi1 = new FileInfo(targetZipFilePath);
                        fi1.Delete();
                    }
                    catch (Exception ex)
                    { }
                }
                catch (Exception ex)
                {
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "CreateExcelErrorTip", "alert('Export Failed!');", true);
                    return;
                }
            }
    
            public static byte[] File2Bytes(string path)
            {
                if (!System.IO.File.Exists(path))
                {
                    return new byte[0];
                }
    
                FileInfo fi = new FileInfo(path);
                byte[] buff = new byte[fi.Length];
    
                FileStream fs = fi.OpenRead();
                fs.Read(buff, 0, Convert.ToInt32(fs.Length));
                fs.Close();
    
                return buff;
            }
        }
    }

    压缩用到的

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    using System.Threading;
    
    namespace 布局
    {
        public class FileCompression
        {
            public FileCompression()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            #region 加密、压缩文件
    
            /// <summary>   
            /// 压缩文件   
            /// </summary>   
            /// <param name="fileNames">要打包的文件列表</param>   
            /// <param name="GzipFileName">目标文件名</param>   
            /// <param name="CompressionLevel">压缩品质级别(0~9)</param>   
            /// <param name="SleepTimer">休眠时间(单位毫秒)</param>        
            public static void Compress(List<FileInfo> fileNames, string GzipFileName, int CompressionLevel, int SleepTimer)
            {
                ZipOutputStream s = new ZipOutputStream(File.Create(GzipFileName));
                try
                {
                    s.SetLevel(CompressionLevel);   //0 - store only to 9 - means best compression   
                    foreach (FileInfo file in fileNames)
                    {
                        FileStream fs = null;
                        try
                        {
                            fs = file.Open(FileMode.Open, FileAccess.ReadWrite);
                        }
                        catch
                        { continue; }
                        //  方法二,将文件分批读入缓冲区   
                        byte[] data = new byte[2048];
                        int size = 2048;
                        ZipEntry entry = new ZipEntry(Path.GetFileName(file.Name));
                        entry.DateTime = (file.CreationTime > file.LastWriteTime ? file.LastWriteTime : file.CreationTime);
                        s.PutNextEntry(entry);
                        while (true)
                        {
                            size = fs.Read(data, 0, size);
                            if (size <= 0) break;
                            s.Write(data, 0, size);
                        }
                        fs.Close();
                        file.Delete();
                        Thread.Sleep(SleepTimer);
                    }
                }
                finally
                {
                    s.Finish();
                    s.Close();
                }
            }
            #endregion
    
            #region 解密、解压缩文件
            /// <summary>   
            /// 解压缩文件   
            /// </summary>   
            /// <param name="GzipFile">压缩包文件名</param>   
            /// <param name="targetPath">解压缩目标路径</param>          
            public static void Decompress(string GzipFile, string targetPath)
            {
                //string directoryName = Path.GetDirectoryName(targetPath + "\") + "\";   
                string directoryName = targetPath;
                if (!Directory.Exists(directoryName)) Directory.CreateDirectory(directoryName);//生成解压目录   
                string CurrentDirectory = directoryName;
                byte[] data = new byte[2048];
                int size = 2048;
                ZipEntry theEntry = null;
                using (ZipInputStream s = new ZipInputStream(File.OpenRead(GzipFile)))
                {
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        if (theEntry.IsDirectory)
                        {// 该结点是目录   
                            if (!Directory.Exists(CurrentDirectory + theEntry.Name)) Directory.CreateDirectory(CurrentDirectory + theEntry.Name);
                        }
                        else
                        {
                            if (theEntry.Name != String.Empty)
                            {
                                //解压文件到指定的目录   
                                using (FileStream streamWriter = File.Create(CurrentDirectory + theEntry.Name))
                                {
                                    while (true)
                                    {
                                        size = s.Read(data, 0, data.Length);
                                        if (size <= 0) break;
    
                                        streamWriter.Write(data, 0, size);
                                    }
                                    streamWriter.Close();
                                }
                            }
                        }
                    }
                    s.Close();
                }
            }
            #endregion
        }
    }
    View Code

    压缩DLL https://pan.baidu.com/s/1kIgRcvvzB5ZybHITsRi4ZQ

  • 相关阅读:
    TCP Three-Way handshake
    java 连接mysql 和sql server2008代码
    关于dispatch_sync死锁问题
    MacBook Pro使用初体验之Mac快捷键汇总(持续更新中)
    Java对象的内存布局
    Android之adb
    ADT开发中的一些优化设置:代码背景色、代码字体大小、代码自动补全
    实用的eclipse adt 快捷键
    python操作Excel读--使用xlrd
    解决ImportError: cannot import name HTTPConnection的方法
  • 原文地址:https://www.cnblogs.com/lidaying5/p/10572375.html
Copyright © 2020-2023  润新知