场景描述
在B/S环境下 客户提出批量导出员工照片功能 具体为 选中一个部门或者单位 系统能够批量下载所选单元的照片 下载到用户客户端
解决思路
由于系统中员工的照片存储在服务器硬盘上 因此 应该有两种方式供用户选择 其一 写一个C/S客户端 利用客户端功能 实现客户端批量下载 *** 作 其二 在现有ASP NET环境下 将所需照片文件合并成一个文件下载到用户客户端 比较而言 两种思路的难度都不大 但是考虑到系统的统一性 最终决定采用方案二 将文件打包后下载
实现步骤
在用户 *** 作界面 由用户选择员工 系统根据所选人员 在服务器上创建用于存储所选文件的临时文件夹 将所选文件拷贝至临时文件夹 然后调用RAR程序 对临时文件夹进行压缩 然后输出到客户端 最后删除临时文件夹
部分关键代码
创建临时文件夹
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 );
}
产生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( the_rar Length );
Directory CreateDirectory(patch);
//命令参数
//the_Info = a + rarName + + @ C:Test 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( gb );
Response WriteFile(fileInfo FullName);
Response Flush();
string tempPath = fileName Substring( fileName LastIndexOf( \\ ));
DelDir(tempPath);
Directory Delete(tempPath);
Response End();
}
lishixinzhi/Article/program/net/201311/13948问题一:如何打包word文件 选择所要的WORD文档――单击右键――添加到压缩文件――压缩文件名――压缩文件格式(二选一)――完成
就这样,可以把多个文档打包
问题二:怎样把一个文件制作成多个压缩包? 1楼的太多了~~~写文章啊
最简单的~RAR压缩软件应该有的吧
点住你要压所的文件-右键-添加到压缩文件-常规-最下面有个输入体积的~可以自定义~~用M的话有时会出错~多来几遍就好了~
比如一个10M的文件~你应该输入1 M然后确定,最后会压成10个1M的压缩包,会自动遍号~从1-10~~
问题三:如何将几个文件打包? 简单,用鼠标把你要打包的文件都选上,随便在其中一个文件上面点右键,添加到压缩文件就OK了怕你不会,再教你怎么选那些文件:按住键盘Ctrl键不要放开(在键左下角),用鼠标一个一个把你要打包的文件都点上,它们都变成蓝色了那就是都选上了
问题四:怎么把文件弄成压缩包 先把要打包的文件装入一个文件夹中,然后对这个文件夹右击鼠标,出现WinRAR选项,点击后面的小箭头,出现添加到压缩文件这一项,单击出现对话框,可根据需要选择压缩文件。
问题五:怎样将电脑中的文件制作一个压缩包? 选中要要压缩的文件---右键---添加到压缩文件---d出个窗口 点确定---压缩中----压缩完后在原文件的文件夹下就会有个后缀为rar文件这就是压缩后的文件
如果右键没有“添加到压缩文件”选项,表明你没有安装压缩的软件,建议下载 好压 或者winrar 安装后就可以安我上面说的做了
问题六:怎么把文件弄成压缩包? 打开文件(ps:你要压缩的)点击鼠顶左键把要压缩的文件包括起来,然后,点击鼠标右键,选中添加到压缩文件然后就开始压缩,然后,就完成了!
问题七:怎么把几个文件弄成一个压缩包? 把这些文件,放在一个文件夹里 然后压缩, 或者全选以后 点击鼠标右键 -----添加到压缩文件也行
问题八:js如何做到在内存打包文件 200分 其实在服务器侧比较好实现
在浏览器侧,需要html5 特性,依赖jsZip库
需要指出一下,当文件体量较大的时候,由于单页面占用内存较多,可能会引起浏览器崩溃,因为浏览器不仅要把所有文件读进内存,还要序列化成base64,base64要比原数据内存占用更大一些。
例子:
首先,使用ajax20特性,读入二进制文件:
/ @param url 要下载的文件 @param arr 数组,存放每个文件的二进制数据 @total 总文件数,因为是异步的,所以要在所有文件下载完成后调用回调 /function ajaxFile(url,arr,total){var oReq = new XML>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)