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文件是很麻烦的.当然,现在有很多的软件也可以实 ...
随机推荐
- TensorFlow实现自编码器及多层感知机
1 自动编码机简介 传统机器学习任务在很大程度上依赖于好的特征工程,比如对数值型,日期时间型,种类型等特征的提取.特征工程往往是非常耗时耗力的,在图像,语音和视频中提取到有效的特征就更难 ...
- 有用的vscode快捷键大全+自定义快捷键
VS Code是前端的一个比较好用的代码编辑器,但是我们不能老是局限于鼠标操作呀,有时候很不方便,所以呢,快捷键大全来啦,有的可能会和你们电脑自带的快捷键冲突呢,这时候,你自己设置一下就好了呀 一.v ...
- Java 之 Properties类 属性集
一.概述 java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v> java.util.Propert ...
- android开机启动流程说明
android开机启动流程说明 第一步:启动linux 1.Bootloader 2.Kernel 第二步android系统启动:入口为init.rc(system\core\rootdir) 1./ ...
- python之tkinter入坑Pack()------(1)
tkinter 的pack()可以设置的属性如下: pack_configure(self, cnf={}, **kw)Pack a widget in the parent widget. Use ...
- roles
nginx 官方下载 [root@ansible roles]# tree yngx yngx ├── defaults ├── files │ ├── blog.conf │ ├── edu ...
- 1.利用BeanMap进行对象与Map的相互转换
javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...
- Jenkins企业应用
一,CI/CD,DevOps介绍 持续集成(Continuous Integration,CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈 持续交付(Continuous ...
- Codeforces Round #582 (Div. 3)-G. Path Queries-并查集
Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...
- Luogu P2330 繁忙的都市
Luogu P2330 繁忙的都市 裸的最小生成树. 当然,一定要注意它让你输出什么. #include<bits/stdc++.h> #define N 100010 using nam ...