host=Request.ServerVariables("HTTP_HOST")
fwym="http://" &host &Request.ServerVariables("SCRIPT_NAME")
wenjian=request("wenjian")
select case true
case right(lcase(wenjian),4)=".asp"
response.end
case right(lcase(wenjian),4)=".php"
response.write "该类型文件不允许下载烂如。"
response.end
case right(lcase(wenjian),5)=".aspx"
response.write "该饥知启类型文件不允许下载。"
response.end
end select
wenjian=replace(wenjian,"/","\")
a=split(wenjian,"\")
filename=a(ubound(a))
Set fso = CreateObject("Scripting.FileSystemObject")
fileurl=left(fwym,len(fwym)-8) &wenjian
fileurl=replace(fileurl,"\","猛历/")
if instr(1,wenjian,":")=0 then wenjian=server.mappath(wenjian)
'设置可下载文件大小上限
maxsize=50000000
'response.write wenjian
'response.end
set f1=fso.getfile(wenjian)
if f1.size>maxsize then
response.write "文件太大了,不允许下载。" &dxzh(f1.size) &"只支持" &dxzh(maxsize) &"以内的文件下载"
response.end
end if
if instr(1,wenjian,":")=0 then
'response.write fileurl
response.redirect fileurl
response.end
end if
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachmentfilename =" &filename
set objstream = Server.CreateObject("adodb.stream")
objstream.Mode = 3
objstream.Type = 1
objstream.Open
objstream.LoadFromFile (wenjian)
BytesToBstr = objstream.Read
response.binarywrite BytesToBstr
function dxzh(dx)
zijieshu = dx &"字节"
kbshu = FormatNumber(dx / 1024, "0.0") &"KB"
mbshu = FormatNumber(dx / 1024 / 1024, 2) &"MB"
fsize = dx
If fsize / 1024 <1 Then dxzh = zijieshu
If fsize / 1024 >= 1 And fsize / 1024 <1024 Then dxzh = kbshu
If fsize / 1024 >= 1024 Then dxzh = mbshu
end function
%>
场景描述
在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 attachmentfilename= + 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)