今天遇到个需求,需要将所有附件按照指定规则进行分类打包,最后生成ZIP进行下载。
首先需要创建一个文件夹,用于存储所有附件打包后的文件夹,然后再对该文件夹压缩处理,最后提供给用户下载。
string desktopPath = 存储文件夹路径;
if (!Directory.Exists(desktopPath))//判断上传路径是否存在
{
Directory.CreateDirectory(desktopPath);//不存在则进行创建
}
string DriverAccessory =附件目录前缀;
string returntext = DateTime.Now.ToString("yyyyMMddHHmmss") + "任务附件下载";
string newStoragePath = desktopPath + @"\" + returntext;
Directory.CreateDirectory(newStoragePath); //创建父级文件夹,用于存储所有打包后的附件文件夹(可能存在N个文件夹在里面)
List<TaskProgressOutModel> taskProgresses = new TaskProgressBLL().GetTaskProgressLis(status, driverName, carNum, ShopPlatformType); //查询数据
foreach (var item in taskProgresses) //遍历数据,并把生成的文件夹放在刚刚生成的文件夹里面
{
List<AccessoryModel> accessories = new TaskProgressBLL().GetAccessories(item.Id); //查询数据
Directory.CreateDirectory(newStoragePath + @"\" + item.Name + "-" + item.CarNum + "-" + item.Id);//在刚刚创建的文件夹里面创建子文件夹用于存储某一条数据的所有附件
foreach (var item1 in accessories)
{
string destPath = Path.Combine(newStoragePath + @"\" + item.Name + "-" + item.CarNum + "-" + item.Id,
Path.GetFileName(DriverAccessory + item1.AccessoryPath)); //前一个为所要去的文件夹路径,后一个为附件路径
System.IO.File.Copy(DriverAccessory + item1.AccessoryPath, destPath); //把附件Copy到指定文件夹中 //前一个为需要复制的文件路径,后一个为去往那个文件夹的路径
}
}
ZipHelper.CreateZip(newStoragePath, newStoragePath + ".zip"); //把刚刚生成的父级文件夹进行打包
return SuccessResult(WebConfigurationManager.AppSettings["DealerQRcode"] + returntext + ".zip"); //返回打包后的目录地址