在处理后台附件上载由于文件较多,需要每个文件单独上传关键是有些文件数据量比较少 也需要单独上传,这样导致后台数据流量较大而且用户操作麻烦.
在处理这方面业务时,可以简化:首先验证用户上传文件的大小,设定不超过1M文件为限制并记录,当用户点击一次操作时后台程序把所有小数据量文件进行压缩成一个单独文件来上传,这样简化用户操作难度 增强用户体验,在获得上载文件时同样把这个文件进行解压本地即可...
使用ICSharpCode.SharpZipLib-(C#)实现解压缩文件的操作类: 完整代码如下
A:ICSharpCode.SharpZipLib.DLL组件下载地址,如果要实现必须在项目中引用该组件DLL
下载地址:http://good.gd/203866.htm
B:完整的操作类代码实例:
在处理这方面业务时,可以简化:首先验证用户上传文件的大小,设定不超过1M文件为限制并记录,当用户点击一次操作时后台程序把所有小数据量文件进行压缩成一个单独文件来上传,这样简化用户操作难度 增强用户体验,在获得上载文件时同样把这个文件进行解压本地即可...
使用ICSharpCode.SharpZipLib-(C#)实现解压缩文件的操作类: 完整代码如下
A:ICSharpCode.SharpZipLib.DLL组件下载地址,如果要实现必须在项目中引用该组件DLL
下载地址:http://good.gd/203866.htm
B:完整的操作类代码实例:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Web;
5
6
//using the Compent Comspac
7
using System.IO;
8
using System.Text;
9
using System.Threading;
10
using ICSharpCode.SharpZipLib;
11
using ICSharpCode.SharpZipLib.Zip;
12
using ICSharpCode.SharpZipLib.Checksums;
13
14
namespace TestJqueryAjax
15
{
16
/// <summary>
17
/// 使用ICSharpZipCode.Dll实现解压缩
18
/// Author:chenkai Time:2009年7月13日22:03:27
19
/// Version:Beta1.0.0-(测试版)
20
/// </summary>
21
public class ICSharpZipCodeTest
22
{
23
24
/// <summary>
25
/// 实现压缩功能
26
/// </summary>
27
/// <param name="filenameToZip">要压缩文件(绝对文件路径)</param>
28
/// <param name="Zipedfiledname">压缩(绝对文件路径)</param>
29
/// <param name="CompressionLevel">压缩比</param>
30
/// <param name="password">加密密码</param>
31
/// <param name="comment">压缩文件描述</param>
32
/// <returns>异常信息</returns>
33
public static string MakeZipFile(string[] filenameToZip, string Zipedfiledname, int CompressionLevel,
34
string password, string comment)
35
{
36
try
37
{
38
//使用正则表达式-判断压缩文件路径
39
System.Text.RegularExpressions.Regex newRegex = new System.Text.
40
RegularExpressions.Regex(@"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*.*))");
41
42
if (!newRegex.Match(Zipedfiledname).Success)
43
{
44
File.Delete(Zipedfiledname);
45
return "压缩文件的路径有误!";
46
}
47
48
//创建ZipFileOutPutStream
49
ZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname,
50
FileMode.OpenOrCreate));
51
52
//判断Password
53
if (password != null && password.Length > 0)
54
{
55
newzipstream.Password = password;
56
}
57
58
if (comment != null && comment.Length > 0)
59
{
60
newzipstream.SetComment(comment);
61
}
62
63
//设置CompressionLevel
64
newzipstream.SetLevel(CompressionLevel); //-查看0 - means store only to 9 - means best compression
65
66
//执行压缩
67
foreach (string filename in filenameToZip)
68
{
69
FileStream newstream = File.OpenRead(filename);//打开预压缩文件
70
71
//判断路径
72
if (!newRegex.Match(Zipedfiledname).Success)
73
{
74
File.Delete(Zipedfiledname);
75
return "压缩文件目标路径不存在!";
76
}
77
78
byte[] setbuffer=new byte[newstream.Length];
79
newstream.Read(setbuffer,0,setbuffer.Length);//读入文件
80
81
//新建ZipEntrity
82
ZipEntry newEntry = new ZipEntry(filename);
83
84
//设置时间-长度
85
newEntry.DateTime = DateTime.Now;
86
newEntry.Size = newstream.Length;
87
88
newstream.Close();
89
90
newzipstream.PutNextEntry(newEntry);//压入
91
92
newzipstream.Write(setbuffer,0,setbuffer.Length);
93
94
}
95
//重复压入操作
96
newzipstream.Finish();
97
newzipstream.Close();
98
99
}catch (Exception e)
100
{
101
//出现异常
102
File.Delete(Zipedfiledname);
103
return e.Message.ToString();
104
}
105
106
return "";
107
}
108
109
/// <summary>
110
/// 实现解压操作
111
/// </summary>
112
/// <param name="zipfilename">要解压文件Zip(物理路径)</param>
113
/// <param name="UnZipDir">解压目的路径(物理路径)</param>
114
/// <param name="password">解压密码</param>
115
/// <returns>异常信息</returns>
116
public static string UnMakeZipFile(string zipfilename,string UnZipDir,string password)
117
{
118
//判断待解压文件路径
119
if (!File.Exists(zipfilename))
120
{
121
File.Delete(UnZipDir);
122
return "待解压文件路径不存在!";
123
}
124
125
//创建ZipInputStream
126
ZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename));
127
128
//判断Password
129
if (password != null && password.Length > 0)
130
{
131
newinStream.Password = password;
132
}
133
134
//执行解压操作
135
try
136
{
137
ZipEntry theEntry;
138
139
//获取Zip中单个File
140
while ((theEntry = newinStream.GetNextEntry()) != null)
141
{
142
//判断目的路径
143
if (Directory.Exists(UnZipDir))
144
{
145
Directory.CreateDirectory(UnZipDir);//创建目的目录
146
}
147
148
//获得目的目录信息
149
string Driectoryname = Path.GetDirectoryName(UnZipDir);
150
string pathname = Path.GetDirectoryName(theEntry.Name);//获得子级目录
151
string filename = Path.GetFileName(theEntry.Name);//获得子集文件名
152
153
//处理文件盘符问题
154
pathname = pathname.Replace(":", "$");//处理当前压缩出现盘符问题
155
Driectoryname = Driectoryname + "\\" + pathname;
156
157
//创建
158
Directory.CreateDirectory(Driectoryname);
159
160
//解压指定子目录
161
if (filename != string.Empty)
162
{
163
FileStream newstream = File.Create(Driectoryname + "\\" + pathname);
164
165
int size = 2048;
166
167
byte[] newbyte = new byte[size];
168
169
while (true)
170
{
171
size = newinStream.Read(newbyte, 0, newbyte.Length);
172
173
if (size > 0)
174
{
175
//写入数据
176
newstream.Write(newbyte, 0, size);
177
}
178
else
179
{
180
break;
181
}
182
newstream.Close();
183
}
184
}
185
186
}
187
newinStream.Close();
188
}
189
catch (Exception se)
190
{
191
192
return se.Message.ToString();
193
}
194
finally
195
{
196
newinStream.Close();
197
}
198
199
200
return "";
201
}
202
}
203
}
204
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
//using the Compent Comspac7
using System.IO;8
using System.Text;9
using System.Threading;10
using ICSharpCode.SharpZipLib;11
using ICSharpCode.SharpZipLib.Zip;12
using ICSharpCode.SharpZipLib.Checksums;13

14
namespace TestJqueryAjax15
{16
/// <summary>17
/// 使用ICSharpZipCode.Dll实现解压缩18
/// Author:chenkai Time:2009年7月13日22:03:2719
/// Version:Beta1.0.0-(测试版)20
/// </summary>21
public class ICSharpZipCodeTest22
{23

24
/// <summary>25
/// 实现压缩功能26
/// </summary>27
/// <param name="filenameToZip">要压缩文件(绝对文件路径)</param>28
/// <param name="Zipedfiledname">压缩(绝对文件路径)</param>29
/// <param name="CompressionLevel">压缩比</param>30
/// <param name="password">加密密码</param>31
/// <param name="comment">压缩文件描述</param>32
/// <returns>异常信息</returns>33
public static string MakeZipFile(string[] filenameToZip, string Zipedfiledname, int CompressionLevel, 34
string password, string comment)35
{36
try37
{38
//使用正则表达式-判断压缩文件路径39
System.Text.RegularExpressions.Regex newRegex = new System.Text.40
RegularExpressions.Regex(@"^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*.*))");41

42
if (!newRegex.Match(Zipedfiledname).Success)43
{44
File.Delete(Zipedfiledname);45
return "压缩文件的路径有误!";46
}47

48
//创建ZipFileOutPutStream49
ZipOutputStream newzipstream = new ZipOutputStream(File.Open(Zipedfiledname,50
FileMode.OpenOrCreate));51
52
//判断Password53
if (password != null && password.Length > 0)54
{55
newzipstream.Password = password;56
}57

58
if (comment != null && comment.Length > 0)59
{60
newzipstream.SetComment(comment);61
}62

63
//设置CompressionLevel64
newzipstream.SetLevel(CompressionLevel); //-查看0 - means store only to 9 - means best compression 65
66
//执行压缩67
foreach (string filename in filenameToZip)68
{69
FileStream newstream = File.OpenRead(filename);//打开预压缩文件70

71
//判断路径72
if (!newRegex.Match(Zipedfiledname).Success)73
{74
File.Delete(Zipedfiledname);75
return "压缩文件目标路径不存在!";76
}77

78
byte[] setbuffer=new byte[newstream.Length];79
newstream.Read(setbuffer,0,setbuffer.Length);//读入文件80

81
//新建ZipEntrity82
ZipEntry newEntry = new ZipEntry(filename);83

84
//设置时间-长度85
newEntry.DateTime = DateTime.Now;86
newEntry.Size = newstream.Length;87

88
newstream.Close();89

90
newzipstream.PutNextEntry(newEntry);//压入91

92
newzipstream.Write(setbuffer,0,setbuffer.Length);93
94
}95
//重复压入操作96
newzipstream.Finish();97
newzipstream.Close();98
99
}catch (Exception e)100
{101
//出现异常102
File.Delete(Zipedfiledname);103
return e.Message.ToString();104
}105
106
return "";107
}108

109
/// <summary>110
/// 实现解压操作111
/// </summary>112
/// <param name="zipfilename">要解压文件Zip(物理路径)</param>113
/// <param name="UnZipDir">解压目的路径(物理路径)</param>114
/// <param name="password">解压密码</param>115
/// <returns>异常信息</returns>116
public static string UnMakeZipFile(string zipfilename,string UnZipDir,string password)117
{118
//判断待解压文件路径119
if (!File.Exists(zipfilename))120
{121
File.Delete(UnZipDir);122
return "待解压文件路径不存在!";123
}124
125
//创建ZipInputStream126
ZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename));127
128
//判断Password129
if (password != null && password.Length > 0)130
{131
newinStream.Password = password;132
}133

134
//执行解压操作135
try136
{137
ZipEntry theEntry;138

139
//获取Zip中单个File140
while ((theEntry = newinStream.GetNextEntry()) != null)141
{142
//判断目的路径143
if (Directory.Exists(UnZipDir))144
{145
Directory.CreateDirectory(UnZipDir);//创建目的目录146
}147

148
//获得目的目录信息149
string Driectoryname = Path.GetDirectoryName(UnZipDir);150
string pathname = Path.GetDirectoryName(theEntry.Name);//获得子级目录151
string filename = Path.GetFileName(theEntry.Name);//获得子集文件名152

153
//处理文件盘符问题154
pathname = pathname.Replace(":", "$");//处理当前压缩出现盘符问题155
Driectoryname = Driectoryname + "\\" + pathname;156

157
//创建158
Directory.CreateDirectory(Driectoryname);159

160
//解压指定子目录161
if (filename != string.Empty)162
{163
FileStream newstream = File.Create(Driectoryname + "\\" + pathname);164

165
int size = 2048;166

167
byte[] newbyte = new byte[size];168

169
while (true)170
{171
size = newinStream.Read(newbyte, 0, newbyte.Length);172

173
if (size > 0)174
{175
//写入数据176
newstream.Write(newbyte, 0, size);177
}178
else179
{180
break;181
}182
newstream.Close();183
}184
}185

186
}187
newinStream.Close();188
}189
catch (Exception se)190
{191

192
return se.Message.ToString();193
}194
finally195
{196
newinStream.Close();197
}198

199

200
return "";201
}202
}203
}204


