其实需求是这样,

要做一键导出,

有图片,有照片,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文件(图片,视频)压缩到服务器 下载到客户端的更多相关文章

  1. smbclient - 类似FTP操作方式的访问SMB/CIFS服务器资源的客户端

    总览 SYNOPSIS smbclient {servicename} [password] [-b <buffer size>] [-d debuglevel] [-D Director ...

  2. webpack处理媒体文件(图片/视频和音频)

    webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的, 这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于 ...

  3. MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传

    前段时间做了几个关于图片.文件上传的Demo,使用客户端Query-File-Upload插件和服务端Badkload组件实现多文件异步上传,比如"MVC文件上传04-使用客户端jQuery ...

  4. Java实现FTP文件与文件夹的上传和下载

    Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...

  5. FTP文件操作之下载文件

    前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了.所以今天就跟大家一起学习学习使用ftp下载文件. 知道了怎么上传,那么下载也就变得很简单了,上传是把文 ...

  6. C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)

    一.C#实现本地文件下载 1.文件下载的路径  文件名称 以及文件下载之后要放的位置  这三个变量是必须要的 2.定义以下四个对象: FileWebRequest ftpWebRequest = nu ...

  7. 读取FTP 图片文件,并显示,非下载

    关于FTP,先从怎么创建开始说起,很简单,步骤就两个 ① 电脑-右键管理--本地用户组--添加用户名,密码(用于FTP的用户名.密码) ② IIS 新建FTP站点,命名,指定端口号.FTP文件路径 接 ...

  8. informatica读取FTP文件

    以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...

  9. 【数据下载】利用wget命令批量下载ftp文件和文件夹

    这是一个“”数据大发现”的时代,大家都在创造数据,使用数据以及分享数据,首先一步我们就需要从数据库download我们需要的数据. Ftp是一种常见的在线数据库,今天介绍一种可以批量下载文件夹的方法, ...

随机推荐

  1. 1.Linux系统安装

    Linux系统安装系统分区(磁盘分区) 主要管理:文件和目录分类:主分区:最多有4个 扩展分区:1个扩展分区 和主分区最多4个 存放逻辑分区 逻辑分区:存放数据 格式化:高级格式化(逻辑格式化) 写入 ...

  2. SAML 2.0 setup steps, 效果图

    Steps of setting up SAML SSO. 效果图 # Registry a Identity Provider services in:(Might need purchase) I ...

  3. Chapter 1: 随机事件及其概率

    1. 随机试验,样本点,样本空间 若试验具有下列特点: 在相同条件下可重复进行 每次试验的可能结果不止一个,且所有可能结果在实验前是已知的 实验前不能确定哪一个结果会发生 则称该试验为随机试验,常记为 ...

  4. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  5. 18-ES6(1)

    第18课-ES6(1) 模块化 1.export和import // model.js export default let m = 1; // 出错 export default n = 2; le ...

  6. 什么是hasLayout?

    想更好的理解CSS,尤其是IE下对CSS的渲染,hasLayout是一个非常有必要彻底弄清楚的概念,大多数IE下的显示错误,就是源于hasLayout.hasLayout是一种只读属性,有两种状态tr ...

  7. python操作Excel--使用xlrd

    一.安装xlrd http://pypi.python.org/pypi/xlrd 二.使用介绍 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open ...

  8. git中忽略UserInterfaceState.xcuserstate的方法

    在commit 时候一直会提示userinterfacestate.xcuserstate文件尚未commit. 你可以用命令行 git rm --cached [YourProjectName].x ...

  9. 剑指offer七:两个链表的第一个公共结点

    输入两个链表,找出它们的第一个公共结点. import java.util.*; public class Solution { public ListNode FindFirstCommonNode ...

  10. C# WebService服务Post提交

    public string WebServerTest(string PostData) { PostData = "jsonData=" + PostData; string P ...