b/s 读取多个FTP文件(图片,视频)压缩到服务器 下载到客户端
其实需求是这样,
要做一键导出,
有图片,有照片,youhtml,存在不同的文件夹,每次下载都必须下载最新数据,因为FTP是随时更新的。
1.这要是一直下载下载,浏览器一直跳窗口,蛋疼的我都看不下去。所以,只能选择别的办法
2.要是放在WEB下载,我觉得肯定会崩溃的呀,所以想选择客户端直接下载,但是必须得装插件,类型ActionX之类的。头给否认了。我凑,只能想别的办法
3.只能先用WEB把流读下来,压缩,然后传给用户,很蛋疼,这要是谁点了,多考验服务器内存CPU,但是头说了,这样也比插件好,好吧,开始做吧
学习连接
http://www.csharpwin.com/dotnetspace/7579r311.shtml
下面是代码
#region Zip multi files
public static int Zip(string destFolder, string[] srcFiles, string folderName, CompressLevel level)
{
OperFileFTP operFileFTP = new OperFileFTP();
ZipOutputStream zipStream = null;
int count = ;
string snappath = "ftp://ip";
try
{
//Use Crc32
Crc32 crc32 = new Crc32();
Stream ftpoutStream = null;
//Create Zip File
zipStream = new ZipOutputStream(File.Create(destFolder));
//Specify Level
zipStream.SetLevel(Convert.ToInt32(level));
#region Foreach File;
foreach (string file in srcFiles)
{
Uri u;
if (file != null)
{
string filepath = file;
string ftpfilepath = file;
if (Path.GetExtension(file) == ".jpg")
{
u = new Uri(snappath);
filepath = filepath.Replace("\\", "/");
ftpfilepath = ftpfilepath.Replace("\\", "/");
}
else
{
u = new Uri(ftppath);
}
filepath = filepath.Substring(, filepath.LastIndexOf("/"));
clsFTP cs = new clsFTP(u, entity.User_Name, entity.Pwd);
byte[] buffer = cs.DownloadFile(ftpfilepath);
//Specify ZipEntry
crc32.Reset();
crc32.Update(buffer);
ZipEntry zipEntry = new ZipEntry(Path.Combine(filepath, Path.GetFileName(file)));
zipEntry.DateTime = DateTime.Now;
zipEntry.Size = buffer.Length;
zipEntry.Crc = crc32.Value;
//Put file info into zip stream
zipStream.PutNextEntry(zipEntry);
zipStream.Write(buffer, , buffer.Length);
count++;
}
}
if (!string.IsNullOrEmpty(folderName))
{
byte[] buffer = System.Text.Encoding.Default.GetBytes(folderName);
//Specify ZipEntry
crc32.Reset();
crc32.Update(buffer);
ZipEntry zipEntry = new ZipEntry(Path.Combine("", Path.GetFileName("OperationReport.htm")));
zipEntry.DateTime = DateTime.Now;
zipEntry.Size = buffer.Length;
zipEntry.Crc = crc32.Value;
//Put file info into zip stream
zipStream.PutNextEntry(zipEntry);
//Put file data into zip stream
zipStream.Write(buffer, , buffer.Length);
count++;
}
#endregion;
if (ftpoutStream != null)
ftpoutStream.Flush();
}
catch
{
throw;
}
finally
{
//Clear Resource
if (zipStream != null)
{
zipStream.Finish();
zipStream.Close();
}
}
FileStream stream = new FileStream(destFolder, FileMode.Open);
//long cl = stream.ContentLength;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(Path.GetFileName(destFolder)));
int bufferSize = ;
int readCount;
byte[] bufferr = new byte[bufferSize];
char[] cChar = Encoding.ASCII.GetChars(bufferr);
//接收FTP文件流
while ((readCount = stream.Read(bufferr, , )) > )
{
HttpContext.Current.Response.OutputStream.Write(bufferr, , readCount);
HttpContext.Current.Response.Flush();
}
stream.Flush();
stream.Close();
if (File.Exists(destFolder))
File.Delete(destFolder);
return count;
}
#endregion
方法如上。。
一下为引用代码。。
时间有限,有机会补充
string[] files = new string[];
Zip(context.Server.MapPath("Tech_" + id + ".zip"), files, str, CompressLevel.Level8);
b/s 读取多个FTP文件(图片,视频)压缩到服务器 下载到客户端的更多相关文章
- smbclient - 类似FTP操作方式的访问SMB/CIFS服务器资源的客户端
总览 SYNOPSIS smbclient {servicename} [password] [-b <buffer size>] [-d debuglevel] [-D Director ...
- webpack处理媒体文件(图片/视频和音频)
webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的, 这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于 ...
- MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传
前段时间做了几个关于图片.文件上传的Demo,使用客户端Query-File-Upload插件和服务端Badkload组件实现多文件异步上传,比如"MVC文件上传04-使用客户端jQuery ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- FTP文件操作之下载文件
前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了.所以今天就跟大家一起学习学习使用ftp下载文件. 知道了怎么上传,那么下载也就变得很简单了,上传是把文 ...
- C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)
一.C#实现本地文件下载 1.文件下载的路径 文件名称 以及文件下载之后要放的位置 这三个变量是必须要的 2.定义以下四个对象: FileWebRequest ftpWebRequest = nu ...
- 读取FTP 图片文件,并显示,非下载
关于FTP,先从怎么创建开始说起,很简单,步骤就两个 ① 电脑-右键管理--本地用户组--添加用户名,密码(用于FTP的用户名.密码) ② IIS 新建FTP站点,命名,指定端口号.FTP文件路径 接 ...
- informatica读取FTP文件
以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...
- 【数据下载】利用wget命令批量下载ftp文件和文件夹
这是一个“”数据大发现”的时代,大家都在创造数据,使用数据以及分享数据,首先一步我们就需要从数据库download我们需要的数据. Ftp是一种常见的在线数据库,今天介绍一种可以批量下载文件夹的方法, ...
随机推荐
- sql 查询表中所有字段的名称
最近工作用到SQL语句查询表中所有字段的名称,网上查询,发现不同数据库的查询方法不同,例如: SQL server 查询表的所有字段名称:Select name from syscolumns Whe ...
- 题目描述: k一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768k 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,9 ...
- Hibernate的映射文件
映射文件的结构和属性 一个映射文件(mapping file)由一个根节点<hibernate-mapping>和多个<class>节点组成, 首先看看根节点<hiber ...
- AutoMagic
AutoMagic 是一个基于WebUI的自动化管理平台.为什么叫AutoMagic呢?因为自动化(Automation)在执行起来的时候是一个很神奇的事情,它可以无人值守的模拟人的操作,就像魔术(M ...
- Android动态方式破解apk终极篇(加固apk破解方式)
一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...
- 使用日期控件datePicker,阻止移动端的自动调取键盘的事件
方法:简单来说就是阻止input的默认事件. 因为datePicker就是用input来封装的,所以直接阻止input的输入事件就ok: 很简单,把input field属性readonly设置为tr ...
- R语言多项式回归
含有x和y这两个变量的线性回归是所有回归分析中最常见的一种:而且,在描述它们关系的时候,也是最有效.最容易假设的一种模型.然而,有些时候,它的实际情况下某些潜在的关系是非常复杂的,不是二元分析所能解决 ...
- Django 步骤
1. 初始化项目 django-admin startproject mysite2. 设置 settings 数据库配置, 必要时手动创建数据库3. 初始化数据库 python manage.py ...
- (转)sqlplus中文显示乱码的问题
sqlplus中文显示乱码的问题 2010-07-19 11:33:26 分类: LINUX 在windows下sqlplus完全正常,可是到linux下,sqlplus中文显示就出问题了,总是显示“ ...
- test homework ~ coverage about method printPrimes
/******************************************************* * Finds and prints n prime integers * Jeff ...