ASP.NET五步打包下载Zip文件实例

首先分享几个振奋人心的新闻:

1.谷歌已经宣布加入.NET基金会

2.微软加入Linux基金会,继续对Linux示好。换了CEO就是不一样

3.微软发布VS For Mac!

第一步   下载dll

在Nuget里安装下面这个dll

第二步   下载方法

项目结构

在我们的一般处理程序中加入如下方法

///<summary>
  /// 批量打包下载 Author:吴双
  /// </summary>
  /// <param name="fileName">文件名称</param>
  /// <param name="filePath">文件虚拟路径</param>
  public static void DownLoadFiles(string fileName, string filePath)
  {
   List<string> fileNames = fileName.Split('|').ToList();
   List<string> filePaths = filePath.Split('|').ToList();
   MemoryStream ms = new MemoryStream();
   byte[] buffer = null;
   using (ZipFile file = ZipFile.Create(ms))
   {
    file.BeginUpdate();
    file.NameTransform = new MyNameTransfom();
    filePaths.ForEach(t =>
    {
     file.Add(HttpContext.Current.Server.MapPath(t));
    });

    file.CommitUpdate();
    buffer = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(buffer, 0, buffer.Length);
   }
   string ss = "批量下载" + fileNames[0] + "等";
   HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + ss + ".zip");
   HttpContext.Current.Response.BinaryWrite(buffer);
   HttpContext.Current.Response.Flush();
   HttpContext.Current.Response.End();
  }

第三步  调用方法

试着下载我们Pic目录下的文件吧!

 public void ProcessRequest(HttpContext context)
  {
   //context.Response.ContentType = "text/plain";
   //context.Response.Write("Hello World");

   DownLoadFiles("xxx", "~/Pic/00.gif|~/Pic/02.png");

  }

第四步   测试结果

把项目跑起来吧!

 下面是打包结果:

第五步   最后的浅谈
见过很多朋友和同事,他们不明白如何直接下载文件到浏览器。

实际上我上一句话,就已经是错误的了。文件并没有下载到浏览器中,而是随着HTTP请求,你Request将参数等一系列信息,流入到下游服务器。而你的HTTP服务器,接收到请求后,经过处理,再向下游客户端,返回一系列的Response结果。

那么你需要做的仅仅是将你的文件流读到响应流当中,并且在浏览器得到你的头部通知时,自然会给你当作文件下载。

你的一切传输都归功于HTTP协议,它基于TCP/IP协议族,在HTTP这个应用层下,为你做出了巨大贡献的还有:传输层,网络层,和数据链路层。在传输层,有TCP为你提供安全可靠的传输支持,而所有的网络通信几乎都需要网络层的IP协议,最后再到数据链路层一系列你可见的路由设备。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • asp.net验证提示美化效果代码(打包下载)

    前段时间看到园里有位高手写了个纯css+js的一个效果,我把它和asp.net验证控件结合起来,用这位高手写的效果做为asp.net难控件的提示效果.如下图 和以前写的比这次写的使用起来方便,只要每个页面继承BasePage就可以了,其中Validator文件夹是必需的文件夹. 代码 复制代码 代码如下: namespace ValidatorTest { public partial class Default : <SPAN style="COLOR: #ff00ff">

  • asp.net网站开发包wq.dll打包下载

    并不是我不开源,我是觉得包起来方便一点,我没有加密,要看源代码的直接反编一下就看到了. 所有WQ对象,按照他们的功能进行了分类,分别放在5个不同的名称空间下: 复制代码 代码如下: using WQ.Data;//数据库操作类 using WQ.Rewriter;//伪URL配置类 using WQ.Server;//服务器信息类(这个没完成) using WQ.Text;//字符串操作类(这是个静态类,全是静态方法) using WQ.Web;//网页常用类(目前只完成了图片水印类) 压缩包下

  • ASP.NET五步打包下载Zip文件实例

    首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会,继续对Linux示好.换了CEO就是不一样 3.微软发布VS For Mac! 第一步   下载dll 在Nuget里安装下面这个dll 第二步   下载方法 项目结构 在我们的一般处理程序中加入如下方法 ///<summary> /// 批量打包下载 Author:吴双 /// </summary> /// <param name="fileName">

  • 几行代码轻松实现PHP文件打包下载zip

    本文实例为大家分享了PHP文件打包下载zip的具体代码,供大家参考,具体内容如下 <?php //获取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir($dir); foreach($file_dir as $file){ if ($file == '.' || $file == '..'){ continue; } elseif (is_dir($dir.$file))

  • vue将文件/图片批量打包下载zip的教程

    vue将文件/图片批量打包下载 各种格式都可以,只要url能够打开或者下载文件即可. 1.通过文件的url,使用js的XMLHttpRequest获取blob 2.将blob压缩为zip 由于异步并行加载文件,速度还是蛮快的,我141个4M多的图片,1分左右加载完成,49个4M的图片4秒 添加依赖 //npm install jszip //npm install file-saver 在页面的script中引入依赖 import JSZip from 'jszip' import FileSa

  • php将文件夹打包成zip文件的简单实现方法

    示例如下: function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filename=readdir($handler))!==false){ if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和'..',不要对他们进行操作 if(is_dir($path."/&q

  • python MultipartEncoder传输zip文件实例

    需求:对方提供处理文件的接口,本地将待处理文件压缩后,通过http post multipart方式上传,等待处理完成后从相应连接下载结果 代码: import os import time import zipfile import requests from requests_toolbelt.multipart.encoder import MultipartEncoder class Func4Fuxi(object): def __init__(self): self.remote_r

  • Java 压缩图片并打包成ZIP文件的示例

    JAVA 获取网络图片或本地图片压缩后打成ZIP,但是获取网络流存在问题:每次获取图片流的大小不一样(图片不完整),以致无法构建图片进行压缩? /*  释以下代码:即可获取完整图片流网络不稳定情况且网络流是顺序读取,所以获得前部份流,不需要关闭连接,只需要将用完的流关闭即可  */   finally{       if(httpCon != null)       httpCon.disconnect();   }   package com.sunshine.monitor.comm.uti

  • asp.net 上传或下载当文件名包含有特殊字符"#"的处理

    如类似以下的代码: 复制代码 代码如下: Uri uri = new Uri(targetUrl);//targetUrl对应文件的绝对路径 System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "PUT"; request.Credentials = System.Net.CredentialCache.DefaultCredentials; reque

  • ASP.NET Core 导入导出Excel xlsx 文件实例

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Linux和Mac. EPPlus.Core 是基于EPPlus 更改而来,在Linux 下需要安装libgdiplus . EPPlus:http://epplus.codeplex.com/ EPPlus.Core:https://github.com/VahidN/EPPlus.Core 下面在A

  • 在ASP.NET中支持断点续传下载大文件(ZT)源码

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传的下载: Accept-Ranges:告知下载客户端这是一个可以恢复续传的下载,存放本次下载的开始字节位置.文件的字节大小: ETag:保存文件的唯一标识(我在用的文件名+文件最后修改时间,以便续传请求时对文件进行验证): Las

  • PHP实现打包下载文件的方法示例

    本文实例讲述了PHP实现打包下载文件的方法.分享给大家供大家参考,具体如下: /** * 下载文件 * @param $img * @return string */ public function Download($img) { $items = []; $names = []; if($img) { //用于前端跳转zip链接拼接 $path_redirect = '/zip/'.date('Ymd'); //临时文件存储地址 $path = '/tmp'.$path_redirect;

随机推荐