C#多个文件流打包下载。

问题描述

调用服务器接口,获取若干个文件的文件流。此时我想把多个文件流压缩成一个压缩包(.zip.7z)下载。请各位大神帮忙.如果使用ICSharpCode.SharpZipLib.dll不知是否能够做到.如果不使用第三方插件,是否能够做到?环境注意:没有服务器创建、删除文件的权限。所以我想到了用内存。不知道有没有大神做过这样的需求。在线等!

解决方案

解决方案二:
试试//zip文件输出流staticZipOutputStreamzos=null;//压缩附件publicstaticvoiddownloadAttach(stringfilePath,stringstrFileName,HttpResponseresponse){MemoryStreamms=null;response.ContentType="application/octet-stream";strFileName=HttpUtility.UrlEncode(strFileName).Replace('+','');response.AddHeader("Content-Disposition","attachment;filename="+strFileName+".zip");ms=newMemoryStream();zos=newZipOutputStream(ms);addZipEntry(filePath);zos.Finish();zos.Close();response.Clear();response.BinaryWrite(ms.ToArray());response.End();}//添加文件至压缩包privatestaticvoidaddZipEntry(stringPathStr){DirectoryInfodi=newDirectoryInfo(PathStr);foreach(DirectoryInfoitemindi.GetDirectories()){addZipEntry(item.FullName);}foreach(FileInfoitemindi.GetFiles()){FileStreamfs=File.OpenRead(item.FullName);byte[]buffer=newbyte[fs.Length];fs.Read(buffer,0,buffer.Length);stringstrEntryName=item.FullName.Replace(PathStr,"");ZipEntryentry=newZipEntry(strEntryName);zos.PutNextEntry(entry);zos.Write(buffer,0,buffer.Length);fs.Close();}}

解决方案三:
引用1楼andywangguanxi的回复:

试试//zip文件输出流staticZipOutputStreamzos=null;//压缩附件publicstaticvoiddownloadAttach(stringfilePath,stringstrFileName,HttpResponseresponse){MemoryStreamms=null;response.ContentType="application/octet-stream";strFileName=HttpUtility.UrlEncode(strFileName).Replace('+','');response.AddHeader("Content-Disposition","attachment;filename="+strFileName+".zip");ms=newMemoryStream();zos=newZipOutputStream(ms);addZipEntry(filePath);zos.Finish();zos.Close();response.Clear();response.BinaryWrite(ms.ToArray());response.End();}//添加文件至压缩包privatestaticvoidaddZipEntry(stringPathStr){DirectoryInfodi=newDirectoryInfo(PathStr);foreach(DirectoryInfoitemindi.GetDirectories()){addZipEntry(item.FullName);}foreach(FileInfoitemindi.GetFiles()){FileStreamfs=File.OpenRead(item.FullName);byte[]buffer=newbyte[fs.Length];fs.Read(buffer,0,buffer.Length);stringstrEntryName=item.FullName.Replace(PathStr,"");ZipEntryentry=newZipEntry(strEntryName);zos.PutNextEntry(entry);zos.Write(buffer,0,buffer.Length);fs.Close();}}

downloadAttach方法中的filePath参数是代表的什么?
解决方案四:
引用2楼z22708387的回复:

Quote: 引用1楼andywangguanxi的回复:
试试//zip文件输出流staticZipOutputStreamzos=null;//压缩附件publicstaticvoiddownloadAttach(stringfilePath,stringstrFileName,HttpResponseresponse){MemoryStreamms=null;response.ContentType="application/octet-stream";strFileName=HttpUtility.UrlEncode(strFileName).Replace('+','');response.AddHeader("Content-Disposition","attachment;filename="+strFileName+".zip");ms=newMemoryStream();zos=newZipOutputStream(ms);addZipEntry(filePath);zos.Finish();zos.Close();response.Clear();response.BinaryWrite(ms.ToArray());response.End();}//添加文件至压缩包privatestaticvoidaddZipEntry(stringPathStr){DirectoryInfodi=newDirectoryInfo(PathStr);foreach(DirectoryInfoitemindi.GetDirectories()){addZipEntry(item.FullName);}foreach(FileInfoitemindi.GetFiles()){FileStreamfs=File.OpenRead(item.FullName);byte[]buffer=newbyte[fs.Length];fs.Read(buffer,0,buffer.Length);stringstrEntryName=item.FullName.Replace(PathStr,"");ZipEntryentry=newZipEntry(strEntryName);zos.PutNextEntry(entry);zos.Write(buffer,0,buffer.Length);fs.Close();}}

downloadAttach方法中的filePath参数是代表的什么?

这个方法是把filePaht路径下的所有文件打包成一个zip包。不知道你的文件流怎么来的,你可以对addZipEntry进行修改
解决方案五:
.NET4.5有System.IO.Compression.dll,在4.0里面也可以使用。using(MemoryStreamstream=newMemoryStream()){using(ZipArchivezip=newZipArchive(stream,ZipArchiveMode.Create,true)){zip.CreateEntry("filename").Open().Write(...);}returnstream;}这只是一个简单的例子,中间的Dispose/using自己处理。

解决方案六:

解决方案七:
直接用打包工具,做成一个exe,然后下载个文件就是了。我用是NSIS
解决方案八:
有没有找到解决方案,我也急需!文件都是通过web服务读取,跟应用程序不在一个服务器上。通过web服务读取后如何打包下载
解决方案九:
上面几位都是通过读取文件路径的方式打包
解决方案十:
C#下载带进度条代码(普通进度条)
解决方案十一:
引用3楼andywangguanxi的回复:

Quote: 引用2楼z22708387的回复:
Quote: 引用1楼andywangguanxi的回复:
试试//zip文件输出流staticZipOutputStreamzos=null;//压缩附件publicstaticvoiddownloadAttach(stringfilePath,stringstrFileName,HttpResponseresponse){MemoryStreamms=null;response.ContentType="application/octet-stream";strFileName=HttpUtility.UrlEncode(strFileName).Replace('+','');response.AddHeader("Content-Disposition","attachment;filename="+strFileName+".zip");ms=newMemoryStream();zos=newZipOutputStream(ms);addZipEntry(filePath);zos.Finish();zos.Close();response.Clear();response.BinaryWrite(ms.ToArray());response.End();}//添加文件至压缩包privatestaticvoidaddZipEntry(stringPathStr){DirectoryInfodi=newDirectoryInfo(PathStr);foreach(DirectoryInfoitemindi.GetDirectories()){addZipEntry(item.FullName);}foreach(FileInfoitemindi.GetFiles()){FileStreamfs=File.OpenRead(item.FullName);byte[]buffer=newbyte[fs.Length];fs.Read(buffer,0,buffer.Length);stringstrEntryName=item.FullName.Replace(PathStr,"");ZipEntryentry=newZipEntry(strEntryName);zos.PutNextEntry(entry);zos.Write(buffer,0,buffer.Length);fs.Close();}}

downloadAttach方法中的filePath参数是代表的什么?

这个方法是把filePaht路径下的所有文件打包成一个zip包。不知道你的文件流怎么来的,你可以对addZipEntry进行修改

能不能指定打包该目录下的几个文件。并不一定要整个文件夹里所有的文件。

时间: 2025-01-01 13:26:07

C#多个文件流打包下载。的相关文章

link环境下,如何用codefirst制作单个文件和打包下载的提取码?它们怎么区别?

问题描述 link环境下,如何用codefirst制作单个文件和打包下载的提取码?它们怎么区别? link环境下,如何用codefirst制作单个文件和打包下载的提取码?它们怎么区别? 解决方案 提取码随机生成就可以了.然后记录在一个表中.

使用函数计算来打包下载OSS文件

需求 打包下载OSS上存储的多个文件 方案 使用函数计算先把多个文件压缩成一个zip,存储到OSS上面,返回zip文件的地址,客户端下载此文件. 函数代码下载zip-oss.zip 实现细节 函数运行环境的磁盘空间是有限的,采用流式下载和上传的方式,只在内存中缓存少量的数据. 为了加快速度,一边生成zip文件时一边上传到OSS 上传zip文件到OSS时,利用OSS分片上传的特性,多线程并发上传 实验 实验数据 # 文件数 压缩前总大小 压缩后总大小 执行时间 1 7 1.2MB 1.16MB 0

ASP.NET五步打包下载Zip文件实例_实用技巧

首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会,继续对Linux示好.换了CEO就是不一样 3.微软发布VS For Mac! 第一步   下载dll 在Nuget里安装下面这个dll 第二步   下载方法 项目结构 在我们的一般处理程序中加入如下方法 ///<summary> /// 批量打包下载 Author:吴双 /// </summary> /// <param name="fileName">

JSP 多个文件打包下载代码

现把该程序主要代码贴下,供大家需要的时候参考下:     <%@page import="java.util.*, java.net.*, java.text.*, java.util.zip.*, java.io.*" %> <%! static Vector expandFileList(String[] files, boolean inclDirs){ Vector v = new Vector(); if (files == null) return v;

使用PHP自带zlib函数 几行代码实现PHP文件打包下载zip

<?php //获取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir)){ $file_dir = scandir($dir); foreach($file_dir as $file){ if ($file == '.' || $file == '..'){ continue; } elseif (is_dir($dir.$file)){ $result = array_merge($result, list_dir

文件操作-ASP.NET对称解密后Response文件流下载

问题描述 ASP.NET对称解密后Response文件流下载 一个AES对称加密压缩文件用AES解密后使用MemoryStream内存文件流存放后转换为byte[]字节流数组使用Response文件流输出方式输出.压缩文件打开的时候提示文件流出错,内容一样可以查看说明解密成功了.使用FileStream保存文件无任何异常. ` 解决方案 http://www.cnblogs.com/chaoa/archive/2012/03/09/2386106.html

在C#中如何实现多文件打包压缩下载?(就像是新浪邮箱中附件打包下载一样)谢谢啦!急急急!!

问题描述 在C#中如何实现多文件打包压缩下载?(就像是新浪邮箱中附件打包下载一样)谢谢啦!

response.getoutputstream 输出文件流下载时文件损坏

问题描述 response.getoutputstream 输出文件流下载时文件损坏 response.getoutputstream 输出文件流下载时文件损坏 解决方案 原文件既损坏,下载文件片段不全,数据处理不当

net文件流 下载-用流下载文件时,下载文件名后的文件名为什么老是当前网页的名称,求大神指导

问题描述 用流下载文件时,下载文件名后的文件名为什么老是当前网页的名称,求大神指导 System.IO.FileInfo file = new System.IO.FileInfo(xpath); Response.Clear(); Response.Charset = "GB2312 "; Response.ContentEncoding = System.Text.Encoding.UTF8; //Response.ContentType = "application/o