時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
1.場(chǎng)景描述
在B/S環(huán)境下,客戶提出批量導(dǎo)出員工照片功能。具體為:選中一個(gè)部門或者單位,系統(tǒng)能夠批量下載所選單元的照片,下載到用戶客戶端。
2.解決思路
由于系統(tǒng)中員工的照片存儲(chǔ)在服務(wù)器硬盤上,因此,應(yīng)該有兩種方式供用戶選擇:其一,寫一個(gè)C/S客戶端,利用客戶端功能,實(shí)現(xiàn)客戶端批量下載操作。其二,在現(xiàn)有ASP.NET環(huán)境下,將所需照片文件合并成一個(gè)文件下載到用戶客戶端。比較而言,兩種思路的難度都不大,但是考慮到系統(tǒng)的統(tǒng)一性,最終決定采用方案二,將文件打包后下載。
3.實(shí)現(xiàn)步驟
在用戶操作界面,由用戶選擇員工,系統(tǒng)根據(jù)所選人員,在服務(wù)器上創(chuàng)建用于存儲(chǔ)所選文件的臨時(shí)文件夾,將所選文件拷貝至臨時(shí)文件夾。然后調(diào)用RAR程序,對(duì)臨時(shí)文件夾進(jìn)行壓縮,然后輸出到客戶端。最后刪除臨時(shí)文件夾。
4.部分關(guān)鍵代碼
創(chuàng)建臨時(shí)文件夾
string Folder = DateTime.Now.ToString("HHMMss");
string tempFolder = Path.Combine(ImagesPath, Folder);
Directory.CreateDirectory(tempFolder);
var empList = rs.ToList();
拷貝照片文件
foreach (var x in empList)
{
File.Copy(ImagesPath + @"\" + x.ID + ".jpg", tempFolder + @"\" + x.DeptName + "-" + x.Name + "-" + x.ID + ".jpg");
}
產(chǎn)生RAR文件,及文件輸出
RARsave(tempFolder, tempFolder, Folder);
ResponseFile(tempFolder + @"\" + Folder + ".rar");
public 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(@"WinRAR");
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);
//命令參數(shù)
//the_Info = " a??? " + rarName + "? " + @"C:Test?70821.txt"; //文件壓縮
the_Info = " a " + rarName + "? " + patch + "? -r";
the_StartInfo = new ProcessStartInfo();
the_StartInfo.FileName = "WinRar";//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;
}
}
protected void ResponseFile(string fileName)
{
FileInfo fileInfo = new FileInfo(fileName);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
string tempPath = fileName.Substring(0, fileName.LastIndexOf("\\"));
DelDir(tempPath);
Directory.Delete(tempPath);
Response.End();
}
關(guān)鍵詞標(biāo)簽:ASP.NET
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載