需要的DLL :

ICSharpCode.SharpZipLib.dll


JS部分

  1. //下载所有文件的 压缩包
  2. function DownAllFile() {
  3. //zip文件名
  4. var zipName = "我的zip文件";
  5. //url字符串 (示例数据) (注意!: 使用 '逗号' 分隔文件名和 url 地址,使用 '$' 分隔 每个文件.)
  6. var urlStr =
  7. '第1个文件,http://xxxxx/yyyyy?id=688$' +
  8. '第2个文件,http://xxxxx/yyyyy?id=687$' +
  9. '第3个文件,http://xxxxx/yyyyy?id=686$' +
  10. '第4个文件,http://xxxxx/yyyyy?id=685$' +
  11. '第5个文件,http://xxxxx/yyyyy?id=684$' +
  12. '第6个文件,http://xxxxx/yyyyy?id=683$' +
  13. '第7个文件,http://xxxxx/yyyyy?id=682$' +
  14. '第8个文件,http://xxxxx/yyyyy?id=681$' +
  15. '第9个文件,http://xxxxx/yyyyy?id=680$';
  16. //form提交
  17. var form = $('<form>');
  18. form.attr('style','display:none');
  19. form.attr('target','');
  20. form.attr('method','post');
  21. form.attr('action','这里写对应的方法地址'); //这里写对应的方法地址
  22. var name1 = $('<input>');
  23. name1.attr('type','text');
  24. name1.attr('name','urlStr');
  25. name1.attr('value', urlStr); //文件url
  26. var name2 = $('<input>');
  27. name2.attr('type', 'text');
  28. name2.attr('name', 'zipName');
  29. name2.attr('value', zipName); //zip文件名
  30. $('body').append(form);
  31. form.append(name1);
  32. form.append(name2);
  33. form.submit();
  34. form.remove();
  35. }

C# 部分

  1. /// <summary>
  2. /// 下载全部条款
  3. /// </summary>
  4. /// <param name="zipName"></param>
  5. /// <param name="urlStr"></param>
  6. [HttpPost]
  7. public void DownAllProductClause(string zipName, string urlStr)
  8. {
  9. //得到文件信息(名字,地址) (去掉最后一个 '$' , 并用 '$' 分隔字符串. 取到每个文件的文件名和路径 )
  10. string[] urlArray = urlStr.TrimEnd('$').Split('$');
  11. //使用WebClient 下载文件
  12. System.Net.WebClient myWebClient = new System.Net.WebClient();
  13. //存 文件名 和 数据流
  14. Dictionary<string, Stream> dc = new Dictionary<string, Stream>();
  15. //取出字符串中信息 (文件名和地址)
  16. for (int i = 0; i < urlArray.Length; i++)
  17. {
  18. //使用 ',' 分隔 文件名和路径 [0]位置是文件名, [1] 位置是路径
  19. string[] urlSp = urlArray[i].Split(',');
  20. //调用WebClient 的 DownLoadData 方法 下载文件
  21. byte[] data = myWebClient.DownloadData(urlSp[1]);
  22. Stream stream = new MemoryStream(data);//byte[] 转换成 流
  23. //放入 文件名 和 stream
  24. dc.Add(urlSp[0] + ".doc", stream);//这里指定为 .doc格式 (自己可以随时改)
  25. }
  26. //调用压缩方法 进行压缩 (接收byte[] 数据)
  27. byte[] fileBytes = ConvertZipStream(dc);
  28. Response.ContentType = "application/octet-stream";
  29. Response.AppendHeader("Content-Disposition", "attachment;filename=" + zipName + ".rar");//文件名和格式(格式可以自己定)
  30. Response.AddHeader("Content-Length", fileBytes.Length.ToString());//文件大小
  31. Response.BinaryWrite(fileBytes); //放入byte[]
  32. Response.End();
  33. Response.Close();
  34. }
  35. /// <summary>
  36. /// ZipStream 压缩
  37. /// </summary>
  38. /// <param name="streams">Dictionary(string, Stream) 文件名和Stream</param>
  39. /// <returns></returns>
  40. public byte[] ConvertZipStream(Dictionary<string, Stream> streams)
  41. {
  42. byte[] buffer = new byte[6500];
  43. MemoryStream returnStream = new MemoryStream();
  44. var zipMs = new MemoryStream();
  45. using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(zipMs))
  46. {
  47. zipStream.SetLevel(9);//设置 压缩等级 (9级 500KB 压缩成了96KB)
  48. foreach (var kv in streams)
  49. {
  50. string fileName = kv.Key;
  51. using (var streamInput = kv.Value)
  52. {
  53. zipStream.PutNextEntry(new ICSharpCode.SharpZipLib.Zip.ZipEntry(fileName));
  54. while (true)
  55. {
  56. var readCount = streamInput.Read(buffer, 0, buffer.Length);
  57. if (readCount > 0)
  58. {
  59. zipStream.Write(buffer, 0, readCount);
  60. }
  61. else
  62. {
  63. break;
  64. }
  65. }
  66. zipStream.Flush();
  67. }
  68. }
  69. zipStream.Finish();
  70. zipMs.Position = 0;
  71. zipMs.CopyTo(returnStream, 5600);
  72. }
  73. returnStream.Position = 0;
  74. //Stream转Byte[]
  75. byte[] returnBytes = new byte[returnStream.Length];
  76. returnStream.Read(returnBytes, 0, returnBytes.Length);
  77. returnStream.Seek(0, SeekOrigin.Begin);
  78. return returnBytes;
  79. }

C# 获取网络文件 批量压缩成 文件流 并下载 压缩包的更多相关文章

  1. shell 批量压缩指定文件夹及子文件夹内图片

    shell 批量压缩指定文件夹及子文件夹内图片 用户上传的图片,一般都没有经过压缩,造成空间浪费.因此须要编写一个程序,查找文件夹及子文件夹的图片文件(jpg,gif,png),将大于某值的图片进行压 ...

  2. 把ANSI格式的TXT文件批量转换成UTF-8文件类型

    把ANSI格式的TXT文件批量转换成UTF-8文件类型 Posted on 2010-08-05 10:38 moss_tan_jun 阅读(3635) 评论(0) 编辑 收藏 #region 把AN ...

  3. 用Spring中的ResponseEntity文件批量压缩下载

    我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...

  4. Java实现将文件或者文件夹压缩成zip

            最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类.         这个工具类的功能为: ( ...

  5. c# 实现文件批量压缩

    今天改一个网站的功能,网站提供一些微信的素材,每个页面对应一套素材,如果会员一张一张下载,那么网站交互性就有点太差了.所以修改的内容就是提供一个按钮,点击按钮将这套图片和网站信息进行打包下载. 思路: ...

  6. 【转】Java实现将文件或者文件夹压缩成zip

    转自:https://www.cnblogs.com/zeng1994/p/7862288.html package com.guo.utils; import java.io.*; import j ...

  7. 【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式

    狸窝  复制  收藏  保存到桌面  快速找教程方案  反馈需求  社会主义核心价值观  客服QQ41442901   马上注册 升级VIP   对于视频文件之间的转换问题,我也已经是无力吐槽了,每个 ...

  8. 如果把PNG、JPG、BMP和GIF文件批量转换为ICO文件?

    有时候需要将大量的图片文件(比如PNG.JPG.BMP和GIF文件)批量转换为ICO图标文件,如果一个一个操作,非常费时间.本文将介绍如何用Dr. Folder软件快速批量转换图片文件为ICO图标文件 ...

  9. 【批处理】TXT文件批量转HTML文件工具

    说到批量转html文件,相信喜欢看小说或经常制作电子书和教程的朋友应该很熟悉.因为,我们每次都会面临成千上万的txt文件,要将其转换为能正确显示的html文件是很麻烦的.当然,现在有很多的软件也可以实 ...

随机推荐

  1. wepy框架 怎么在template模板中使用函数

    呵呵.介绍说是类似vue,用起来真累人,就想在模板中使用个函数都要查N久的文档才知道. 具体要怎么操作呢? 要先创建个wxs脚本文件,在里面定义函数或其它的,然后在页面或组件中引入这文件,就可以在模板 ...

  2. mysql建表常用命令

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...

  3. 多个div并排不换行

    1.所有div的父元素不换行   white-space: nowrap; 2.所有div设置为行内元素  display: inline-block; 基于java记账管理系统[尚学堂·百战程序员]

  4. iOS10推送必看UNNotificationAttachment以及UNTimeIntervalNotificationTrigger

    虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...

  5. layui 后台分页

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 运行 jcontrol 报 libXext.so.6: cannot open shared object file 错误

    需要安装额外库: yum install libXext.x86_64 yum install libXrender.x86_64 yum install libXtst.x86_64

  7. 异常-Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x

    1 详细异常 Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlExce ...

  8. python-----opencv图像边界扩充

    在对图片进行卷积处理的时候,如果卷积模版(卷积内核)过大,且不对原图的边界进行扩充,会导致处理之后得到的图片尺寸变的很小,也就是严重失真. 而扩充边界有多种方法,本文就介绍一下这些填充方法. 这是原始 ...

  9. Tensorflow&CNN:裂纹分类

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90478551 - 写在前面 本科毕业设计终于告一段落了.特 ...

  10. Redis4.0之持久化存储

    一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用  redis存储数据的方法是以key-value的形式  value类型 ...