asp.net 如何打包下载附件

baobingbing2 2011-06-01 09:14:04
例如163 邮件,一个邮件有多个附件,如何实现多个附件打包下载?下载下来的为 zip 或 rar 格式的包含所有附件的压缩包?求解
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobingbing2 2011-06-01
  • 打赏
  • 举报
回复
总结下有三种方案:
1、就是2 楼的意思,在上传时就打好包,把用户需要上传的附件和打好的包都上传上去,这样对服务器硬盘要求会太高
2、直接上传用户需要上传的附件,在打包下载时再生成rar文件下载,下载完成后删除生成的rar文件,这样优点是节省服务器硬盘资源,缺点是对于同一份数据下载几次就要打几次包
3、直接上传用户需要上传的附件,在打包下载时再生成rar文件下载,下载完成后保存生成的rar文件,下次再下载时直接发rar文件,这样优点是对于同一份数据下载只要打一次包,缺点是服务器硬盘资源要求太高
大家看看还有什么更好的方式,或者说这三种应该采取哪种比较合适?
孟子E章 2011-06-01
  • 打赏
  • 举报
回复
。net 3.0之后本身就支持压缩了
System.IO.Packaging

参见
http://msdn.microsoft.com/zh-cn/library/system.io.packaging.zippackage.aspx

  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxr0323 的回复:]

C# code
/// <summary>
/// 压缩方法
/// </summary>
/// <param name="patch">预压缩的路径</param>
/// <param name="rarPatch">压缩后的路径</param>
/// <param name="rarName">压缩文件名……
[/Quote]
[Quote=引用 1 楼 wxr0323 的回复:]

可以用文件流把所有的附件压缩成zip的包,再作为附件上传,这样用户就可以一次下载了。

ASP.net C# 在线压缩、解压zip(支持子文件夹)

【原创】ASP.NET C# 压缩和解压缩文件、文件夹函数(测试通过)
[/Quote]

我看看。。学习下~
syb1045 2011-06-01
  • 打赏
  • 举报
回复
MARK
Lisliefor 2011-06-01
  • 打赏
  • 举报
回复
可以用文件流把所有的附件压缩成zip的包,再作为附件上传,这样用户就可以一次下载了。

ASP.net C# 在线压缩、解压zip(支持子文件夹)

【原创】ASP.NET C# 压缩和解压缩文件、文件夹函数(测试通过)
子夜__ 2011-06-01
  • 打赏
  • 举报
回复
/// <summary>
/// 压缩方法
/// </summary>
/// <param name="patch">预压缩的路径</param>
/// <param name="rarPatch">压缩后的路径</param>
/// <param name="rarName">压缩文件名</param>
public static void RARsave(string patch, string rarPatch, string rarName)
{
String the_rar;
RegistryKey the_Reg;
Object the_Obj;
String the_Info;
ProcessStartInfo the_StartInfo;
Process the_Process;
try
{
the_Reg = Registry.ClassesRoot.OpenSubKey(@"Applications\\WinRAR.exe\\Shell\\Open\\Command");
the_Obj = the_Reg.GetValue("");
the_rar = the_Obj.ToString();
the_Reg.Close();
the_rar = the_rar.Substring(1, the_rar.Length - 7);
Directory.CreateDirectory(patch);
//命令参数

//the_Info = " a " + rarName + " " + @"C:Test?70821.txt"; //文件压缩

the_Info = " a " + rarName + " " + patch + " -r"; ;
the_StartInfo = new ProcessStartInfo();
the_StartInfo.FileName = the_rar;
the_StartInfo.Arguments = the_Info;
the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
//打包文件存放目录

the_StartInfo.WorkingDirectory = rarPatch;
the_Process = new Process();
the_Process.StartInfo = the_StartInfo;
the_Process.Start();
the_Process.WaitForExit();
the_Process.Close();
}
catch (Exception ex)
{
throw ex;
}
}

/// <summary>
///解 压缩方法
/// </summary>
/// <param name="patch">预解压缩的路径</param>
/// <param name="rarPatch">解压缩后的路径</param>

public static int unRAR(string unRarPatch, string rarPatch)
{

try
{
System.Diagnostics.Process Process1 = new System.Diagnostics.Process();
Process1.StartInfo.FileName = "Winrar.exe";
Process1.StartInfo.CreateNoWindow = true;
Process1.StartInfo.Arguments = " e " + unRarPatch + " " + rarPatch + " -y";
Process1.Start();
Process1.WaitForExit();
if (Process1.HasExited)
{
return Process1.ExitCode;
}
return -1000;
}
catch (Exception ex)
{
return -1001;
}
}


参考


下载。

#region 文件下载
public bool DownLoadFile(string localPath, string hostURL, int byteCount, string userID, long cruuent)
{

bool result = true;


string tmpURL = hostURL;

byteCount = byteCount * 1024;
hostURL = tmpURL + "&npos=" + cruuent.ToString();

System.IO.FileStream fs;
fs = new FileStream(localPath, FileMode.OpenOrCreate);
if (cruuent > 0)
{
//偏移指针
fs.Seek(cruuent, System.IO.SeekOrigin.Current);
}


System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(hostURL);
if (cruuent > 0)
{
request.AddRange(Convert.ToInt32(cruuent)); //设置Range值
}

try
{
//向服务器请求,获得服务器回应数据流
System.IO.Stream ns = request.GetResponse().GetResponseStream();

byte[] nbytes = new byte[byteCount];
int nReadSize = 0;
nReadSize = ns.Read(nbytes, 0, byteCount);

while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
nReadSize = ns.Read(nbytes, 0, byteCount);

}
fs.Close();
ns.Close();
}
catch(Exception ex)
{
LOG.Error("下载" + localPath + "的时候失败!" + "原因是:" + ex.Message);
fs.Close();
result = false;
}
return result;
}
#endregion

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧