1、html页面
function btn_downfile() {
var rows = $("#gridTable").datagrid('getChecked');
if (rows.length == 0) {
dialogMsg("请勾选一条数据!", -1);
return false;
}
var ids = "";
for (var i = 0; i < rows.length; i++) {
ids += rows[i]["ID"]+",";
}
ids = ids.substr(0, ids.length - 1);
location.href = "/SSWeb/Product/DownPackageFile?ID=" + ids;
}
2、控制器类
首先需要引用using ICSharpCode.SharpZipLib.Zip;
[HttpGet]
public ActionResult DownPackageFile(string ID)
{
if (string.IsNullOrEmpty(ID))
{
return Error("请勾选数据!");
}
Dictionary<string, MemoryStream> dc = new Dictionary<string, MemoryStream>();
ProductBiz biz = new ProductBiz();
var docList = biz.GetListEntity(ID);
if (docList.Count > 0)
{
dc = GetFileFromNetUrl(docList);
}
var zipFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".zip";
MemoryStream ms = new MemoryStream();
byte[] buffer;
using (ZipFile file = ZipFile.Create(ms))
{
file.BeginUpdate();
foreach (var item in dc)
{
StreamDataSource sd = new StreamDataSource(item.Value);
file.Add(sd, item.Key);
}
file.CommitUpdate();
buffer = new byte[ms.Length];
ms.Position = 0;
ms.Read(buffer, 0, buffer.Length);
}
return File(ms.ToArray(), "application/zip", zipFileName);
}
private Dictionary<string, MemoryStream> GetFileFromNetUrl(List<ProductEntity> list)
{
try
{
Dictionary<string, MemoryStream> dc = new Dictionary<string, MemoryStream>();
foreach (var item in list)
{
string filename = item.Title;
WebRequest req = WebRequest.Create(item.Url);
req.Method = "GET";
MemoryStream stmMemory = new MemoryStream();
using (WebResponse webRes = req.GetResponse())
{
int length = (int)webRes.ContentLength;
HttpWebResponse response = webRes as HttpWebResponse;
Stream stream = response.GetResponseStream();
byte[] buffer = new byte[length];
int i;
while ((i = stream.Read(buffer, 0, buffer.Length)) > 0)
{
stmMemory.Write(buffer, 0, i);
}
}
dc.Add(filename, stmMemory);
}
return dc;
}
catch (System.Exception ex)
{
throw ex;
}
}
3、帮助类
public class StreamDataSource : IStaticDataSource
{
public byte[] bytes { get; set; }
public StreamDataSource(MemoryStream ms)
{
bytes = ms.GetBuffer();
}
public Stream GetSource()
{
Stream s = new MemoryStream(bytes);
return s;
}
}
批量打包下载文件,新版地址