C# 获取网络文件 批量压缩成 文件流 并下载 压缩包
需要的DLL :
ICSharpCode.SharpZipLib.dll
JS部分
//下载所有文件的 压缩包
function DownAllFile() {
//zip文件名
var zipName = "我的zip文件";
//url字符串 (示例数据) (注意!: 使用 '逗号' 分隔文件名和 url 地址,使用 '$' 分隔 每个文件.)
var urlStr =
'第1个文件,http://xxxxx/yyyyy?id=688$' +
'第2个文件,http://xxxxx/yyyyy?id=687$' +
'第3个文件,http://xxxxx/yyyyy?id=686$' +
'第4个文件,http://xxxxx/yyyyy?id=685$' +
'第5个文件,http://xxxxx/yyyyy?id=684$' +
'第6个文件,http://xxxxx/yyyyy?id=683$' +
'第7个文件,http://xxxxx/yyyyy?id=682$' +
'第8个文件,http://xxxxx/yyyyy?id=681$' +
'第9个文件,http://xxxxx/yyyyy?id=680$';
//form提交
var form = $('<form>');
form.attr('style','display:none');
form.attr('target','');
form.attr('method','post');
form.attr('action','这里写对应的方法地址'); //这里写对应的方法地址
var name1 = $('<input>');
name1.attr('type','text');
name1.attr('name','urlStr');
name1.attr('value', urlStr); //文件url
var name2 = $('<input>');
name2.attr('type', 'text');
name2.attr('name', 'zipName');
name2.attr('value', zipName); //zip文件名
$('body').append(form);
form.append(name1);
form.append(name2);
form.submit();
form.remove();
}
C# 部分
/// <summary>
/// 下载全部条款
/// </summary>
/// <param name="zipName"></param>
/// <param name="urlStr"></param>
[HttpPost]
public void DownAllProductClause(string zipName, string urlStr)
{
//得到文件信息(名字,地址) (去掉最后一个 '$' , 并用 '$' 分隔字符串. 取到每个文件的文件名和路径 )
string[] urlArray = urlStr.TrimEnd('$').Split('$');
//使用WebClient 下载文件
System.Net.WebClient myWebClient = new System.Net.WebClient();
//存 文件名 和 数据流
Dictionary<string, Stream> dc = new Dictionary<string, Stream>();
//取出字符串中信息 (文件名和地址)
for (int i = 0; i < urlArray.Length; i++)
{
//使用 ',' 分隔 文件名和路径 [0]位置是文件名, [1] 位置是路径
string[] urlSp = urlArray[i].Split(',');
//调用WebClient 的 DownLoadData 方法 下载文件
byte[] data = myWebClient.DownloadData(urlSp[1]);
Stream stream = new MemoryStream(data);//byte[] 转换成 流
//放入 文件名 和 stream
dc.Add(urlSp[0] + ".doc", stream);//这里指定为 .doc格式 (自己可以随时改)
}
//调用压缩方法 进行压缩 (接收byte[] 数据)
byte[] fileBytes = ConvertZipStream(dc);
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + zipName + ".rar");//文件名和格式(格式可以自己定)
Response.AddHeader("Content-Length", fileBytes.Length.ToString());//文件大小
Response.BinaryWrite(fileBytes); //放入byte[]
Response.End();
Response.Close();
}
/// <summary>
/// ZipStream 压缩
/// </summary>
/// <param name="streams">Dictionary(string, Stream) 文件名和Stream</param>
/// <returns></returns>
public byte[] ConvertZipStream(Dictionary<string, Stream> streams)
{
byte[] buffer = new byte[6500];
MemoryStream returnStream = new MemoryStream();
var zipMs = new MemoryStream();
using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(zipMs))
{
zipStream.SetLevel(9);//设置 压缩等级 (9级 500KB 压缩成了96KB)
foreach (var kv in streams)
{
string fileName = kv.Key;
using (var streamInput = kv.Value)
{
zipStream.PutNextEntry(new ICSharpCode.SharpZipLib.Zip.ZipEntry(fileName));
while (true)
{
var readCount = streamInput.Read(buffer, 0, buffer.Length);
if (readCount > 0)
{
zipStream.Write(buffer, 0, readCount);
}
else
{
break;
}
}
zipStream.Flush();
}
}
zipStream.Finish();
zipMs.Position = 0;
zipMs.CopyTo(returnStream, 5600);
}
returnStream.Position = 0;
//Stream转Byte[]
byte[] returnBytes = new byte[returnStream.Length];
returnStream.Read(returnBytes, 0, returnBytes.Length);
returnStream.Seek(0, SeekOrigin.Begin);
return returnBytes;
}
C# 获取网络文件 批量压缩成 文件流 并下载 压缩包的更多相关文章
- shell 批量压缩指定文件夹及子文件夹内图片
shell 批量压缩指定文件夹及子文件夹内图片 用户上传的图片,一般都没有经过压缩,造成空间浪费.因此须要编写一个程序,查找文件夹及子文件夹的图片文件(jpg,gif,png),将大于某值的图片进行压 ...
- 把ANSI格式的TXT文件批量转换成UTF-8文件类型
把ANSI格式的TXT文件批量转换成UTF-8文件类型 Posted on 2010-08-05 10:38 moss_tan_jun 阅读(3635) 评论(0) 编辑 收藏 #region 把AN ...
- 用Spring中的ResponseEntity文件批量压缩下载
我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...
- Java实现将文件或者文件夹压缩成zip
最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功能为: ( ...
- c# 实现文件批量压缩
今天改一个网站的功能,网站提供一些微信的素材,每个页面对应一套素材,如果会员一张一张下载,那么网站交互性就有点太差了.所以修改的内容就是提供一个按钮,点击按钮将这套图片和网站信息进行打包下载. 思路: ...
- 【转】Java实现将文件或者文件夹压缩成zip
转自:https://www.cnblogs.com/zeng1994/p/7862288.html package com.guo.utils; import java.io.*; import j ...
- 【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式
狸窝 复制 收藏 保存到桌面 快速找教程方案 反馈需求 社会主义核心价值观 客服QQ41442901 马上注册 升级VIP 对于视频文件之间的转换问题,我也已经是无力吐槽了,每个 ...
- 如果把PNG、JPG、BMP和GIF文件批量转换为ICO文件?
有时候需要将大量的图片文件(比如PNG.JPG.BMP和GIF文件)批量转换为ICO图标文件,如果一个一个操作,非常费时间.本文将介绍如何用Dr. Folder软件快速批量转换图片文件为ICO图标文件 ...
- 【批处理】TXT文件批量转HTML文件工具
说到批量转html文件,相信喜欢看小说或经常制作电子书和教程的朋友应该很熟悉.因为,我们每次都会面临成千上万的txt文件,要将其转换为能正确显示的html文件是很麻烦的.当然,现在有很多的软件也可以实 ...
随机推荐
- wepy框架 怎么在template模板中使用函数
呵呵.介绍说是类似vue,用起来真累人,就想在模板中使用个函数都要查N久的文档才知道. 具体要怎么操作呢? 要先创建个wxs脚本文件,在里面定义函数或其它的,然后在页面或组件中引入这文件,就可以在模板 ...
- mysql建表常用命令
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...
- 多个div并排不换行
1.所有div的父元素不换行 white-space: nowrap; 2.所有div设置为行内元素 display: inline-block; 基于java记账管理系统[尚学堂·百战程序员]
- iOS10推送必看UNNotificationAttachment以及UNTimeIntervalNotificationTrigger
虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...
- layui 后台分页
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 运行 jcontrol 报 libXext.so.6: cannot open shared object file 错误
需要安装额外库: yum install libXext.x86_64 yum install libXrender.x86_64 yum install libXtst.x86_64
- 异常-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 ...
- python-----opencv图像边界扩充
在对图片进行卷积处理的时候,如果卷积模版(卷积内核)过大,且不对原图的边界进行扩充,会导致处理之后得到的图片尺寸变的很小,也就是严重失真. 而扩充边界有多种方法,本文就介绍一下这些填充方法. 这是原始 ...
- Tensorflow&CNN:裂纹分类
版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90478551 - 写在前面 本科毕业设计终于告一段落了.特 ...
- Redis4.0之持久化存储
一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用 redis存储数据的方法是以key-value的形式 value类型 ...