You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

486 lines
18 KiB
Plaintext

using System;
using System.IO;
using System.Web;
using BP.Web;
using BP.Sys;
using BP.Tools;
using BP.WF;
using BP;
using BP.En;
using ICSharpCode.SharpZipLib.Zip;
namespace CCFlow.WF.CCForm
{
public partial class WF_CCForm_DownFile : System.Web.UI.Page
{
#region 属性.
public string GetVal(string key)
{
string val=this.Request.QueryString[key];
return BP.Tools.DealString.DealStr(val);
}
/// <summary>
/// 关闭窗口
/// </summary>
protected void WinClose()
{
this.Response.Write("<script language='JavaScript'> window.close();</script>");
}
public string DoType
{
get
{
return this.GetVal("DoType");
}
}
public string DoWhat
{
get
{
return this.GetVal("DoWhat");
}
}
public string EnsName
{
get
{
return this.GetVal("EnsName");
}
}
public string MyPK
{
get
{
return this.GetVal("MyPK");
}
}
/// <summary>
/// ath.
/// </summary>
public string NoOfObj
{
get
{
return this.GetVal("NoOfObj");
}
}
public string PKVal
{
get
{
return this.GetVal("PKVal");
}
}
public string IsReadonly
{
get
{
return this.GetVal("IsReadonly");
}
}
public string DelPKVal
{
get
{
return this.GetVal("DelPKVal");
}
}
public string FK_FrmAttachment
{
get
{
return this.GetVal("FK_FrmAttachment");
}
}
public string FK_FrmAttachmentExt
{
get
{
return "ND" + this.FK_Node + "_DocMultiAth"; // this.GetVal("FK_FrmAttachment");
}
}
public int _fk_node = 0;
public int FK_Node
{
get
{
if (_fk_node == 0 && !string.IsNullOrEmpty(this.GetVal("FK_Node")))
return int.Parse(this.GetVal("FK_Node"));
return _fk_node;
}
set
{
_fk_node = value;
}
}
public Int64 WorkID
{
get
{
string str = this.GetVal("WorkID");
if (string.IsNullOrEmpty(str))
str = this.GetVal("OID");
if (string.IsNullOrEmpty(str))
str = this.GetVal("PKVal");
return Int64.Parse(str);
}
}
public Int64 FID
{
get
{
string str = this.GetVal("FID");
if (string.IsNullOrEmpty(str))
return 0;
return Int64.Parse(str);
}
}
public string IsCC
{
get
{
string paras = this.GetVal("Paras");
if (string.IsNullOrEmpty(paras) == false)
if (paras.Contains("IsCC=1") == true)
return "1";
return "ssss";
}
}
#endregion 属性.
//附件文件下载
protected void Page_Load(object sender, EventArgs e)
{
this.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
this.Request.ContentEncoding = System.Text.UTF8Encoding.UTF8;
#region 增加跨域.
//让其支持跨域访问.
string origin = this.Request.Headers["Origin"];
if (!string.IsNullOrEmpty(origin))
{
var allAccess_Control_Allow_Origin = System.Web.Configuration.WebConfigurationManager.AppSettings["Access-Control-Allow-Origin"];
this.Response.Headers["Access-Control-Allow-Origin"] = origin;
this.Response.Headers["Access-Control-Allow-Credentials"] = "true";
this.Response.Headers["Access-Control-Allow-Headers"] = "x-requested-with,content-type";
}
#endregion
if (this.DoType == "Down")
{
//获取文件是否加密
bool fileEncrypt = BP.Difference.SystemConfig.IsEnableAthEncrypt;
FrmAttachmentDB downDB = new FrmAttachmentDB();
downDB.MyPK = this.MyPK;
downDB.Retrieve();
FrmAttachment dbAtt = new FrmAttachment();
dbAtt.MyPK = downDB.FK_FrmAttachment;
dbAtt.Retrieve();
if (dbAtt.ReadRole != 0 && this.FK_Node != 0)
{
//标记已经阅读了.
GenerWorkerList gwf = new GenerWorkerList();
int count = gwf.Retrieve(GenerWorkerListAttr.FK_Emp, BP.Web.WebUser.No,
GenerWorkerListAttr.FK_Node, this.FK_Node, GenerWorkerListAttr.WorkID, this.WorkID);
if (count != 0)
{
string str = gwf.GetParaString(dbAtt.NoOfObj);
str += "," + downDB.MyPK;
gwf.SetPara(dbAtt.NoOfObj, str);
gwf.Update();
}
}
bool isEncrypt = downDB.GetParaBoolen("IsEncrypt");
if (dbAtt.AthSaveWay == AthSaveWay.IISServer)
{
#region 解密下载
//1、先解密到本地
string filepath = downDB.FileFullName + ".tmp";
string tempName = downDB.FileName;
if (fileEncrypt == true && isEncrypt == true)
{
if (File.Exists(filepath) == true)
File.Delete(filepath);
EncHelper.DecryptDES(downDB.FileFullName, filepath);
}
else
{
filepath = downDB.FileFullName;
}
#region 文件下载(并删除临时明文文件)
if (!"firefox".Contains(HttpContext.Current.Request.Browser.Browser.ToLower()))
tempName = HttpUtility.UrlEncode(tempName);
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.Headers.Add("Code", "OK");// ("Content-Disposition", "attachment;filename=" + tempName);
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + tempName);
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.ContentType = "application/octet-stream;charset=utf8";
HttpContext.Current.Response.WriteFile(BP.Tools.DealString.DealStr( filepath));
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
#endregion
#endregion
}
if (dbAtt.AthSaveWay == AthSaveWay.FTPServer)
{
//下载文件的临时位置
string tempFile = downDB.GenerTempFile(dbAtt.AthSaveWay);
string tempDescFile = tempFile + ".temp";
if (fileEncrypt == true && isEncrypt == true)
EncHelper.DecryptDES(tempFile, tempDescFile);
else
tempDescFile = tempFile;
BP.WF.HttpHandler.HttpHandlerGlo.DownloadFile(tempDescFile, downDB.FileName);
}
if (dbAtt.AthSaveWay == AthSaveWay.DB)
{
string downpath = GetRealPath(downDB.FileFullName);
string filepath = downpath + ".tmp";
if (fileEncrypt == true && isEncrypt == true)
{
if (File.Exists(filepath) == true)
File.Delete(filepath);
EncHelper.DecryptDES(downpath, filepath);
}
else
filepath = downpath;
BP.WF.HttpHandler.HttpHandlerGlo.DownloadFile(filepath, downDB.FileName);
}
this.WinClose();
return;
}
else if (this.DoType == "EntityFile_Load")
{
EntityFile_Load(sender, e);
this.WinClose();
return;
}
else if (this.DoType == "EntityMutliFile_Load")
{
EntityMutliFile_Load(sender, e);
this.WinClose();
return;
}
}
//实体文件下载
protected void EntityFile_Load(object sender, EventArgs e)
{
//根据EnsName获取Entity
Entities ens = ClassFactory.GetEns(this.EnsName);
Entity en = ens.GetNewEntity;
en.PKVal = this.DelPKVal;
int i = en.RetrieveFromDBSources();
if (i == 0)
return;
//获取使用的客户 TianYe集团保存在FTP服务器上
if (BP.Difference.SystemConfig.CustomerNo.Equals("TianYe") || BP.Difference.SystemConfig.IsUploadFileToFTP == true)
{
string filePath = (string)en.GetValByKey("MyFilePath");
string fileName = (string)en.GetValByKey("MyFileName");
string fileExt = (string)en.GetValByKey("MyFileExt");
//临时存储位置
string tempFile = BP.Difference.SystemConfig.PathOfTemp + System.Guid.NewGuid() + "." + en.GetValByKey("MyFileExt");
if (System.IO.File.Exists(tempFile) == true)
System.IO.File.Delete(tempFile);
//连接FTP服务器
FtpConnection conn = new FtpConnection(BP.Difference.SystemConfig.FTPServerIP, BP.Difference.SystemConfig.FTPServerPort,
BP.Difference.SystemConfig.FTPUserNo, BP.Difference.SystemConfig.FTPUserPassword);
conn.GetFile(filePath, tempFile, false, System.IO.FileAttributes.Archive);
conn.Close();
BP.WF.HttpHandler.HttpHandlerGlo.DownloadFile(tempFile, fileName + "." + fileExt);
//删除临时文件
System.IO.File.Delete(tempFile);
}
else
{
HttpContext.Current.Response.Charset = "GB2312";
string fileName = HttpUtility.UrlEncode((string)en.GetValByKey("MyFileName"));
string fileExt = HttpUtility.UrlEncode((string)en.GetValByKey("MyFileExt"));
HttpContext.Current.Response.AppendHeader("Content-Disposition", "filename=" + fileName + "." + fileExt);
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.ContentType = "application/octet-stream;charset=utf8";
HttpContext.Current.Response.WriteFile(BP.Tools.DealString.DealStr( (string)en.GetValByKey("MyFilePath")) );
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
}
}
//实体文件下载
protected void EntityMutliFile_Load(object sender, EventArgs e)
{
string oid = this.GetVal("OID");
//根据SysFileManager的OID获取对应的实体
SysFileManager fileManager = new SysFileManager();
fileManager.PKVal = oid;
int i = fileManager.RetrieveFromDBSources();
if (i == 0)
throw new Exception("没有找到OID=" + oid + "的文件管理数据,请联系管理员");
//获取使用的客户 TianYe集团保存在FTP服务器上
if (BP.Difference.SystemConfig.CustomerNo.Equals("TianYe") || BP.Difference.SystemConfig.IsUploadFileToFTP == true)
{
string filePath = fileManager.MyFilePath;
string fileName = fileManager.MyFileName;
//临时存储位置
string tempFile = BP.Difference.SystemConfig.PathOfTemp + System.Guid.NewGuid() + "." + fileManager.MyFileExt;
try
{
if (System.IO.File.Exists(tempFile) == true)
System.IO.File.Delete(tempFile);
}
catch
{
// tempFile = SystemConfig.PathOfTemp + System.Guid.NewGuid() + this.FileName;
}
//连接FTP服务器
FtpConnection conn = new FtpConnection(BP.Difference.SystemConfig.FTPServerIP, BP.Difference.SystemConfig.FTPServerPort,
BP.Difference.SystemConfig.FTPUserNo, BP.Difference.SystemConfig.FTPUserPassword);
conn.GetFile(filePath, tempFile, false, System.IO.FileAttributes.Archive);
conn.Close();
BP.WF.HttpHandler.HttpHandlerGlo.DownloadFile(tempFile, fileName);
//删除临时文件
System.IO.File.Delete(tempFile);
}
else
{
HttpContext.Current.Response.Charset = "GB2312";
string fileName = HttpUtility.UrlEncode(fileManager.MyFileName);
string fileExt = HttpUtility.UrlEncode(fileManager.MyFileExt);
HttpContext.Current.Response.AppendHeader("Content-Disposition", "filename=" + fileName + fileExt);
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.ContentType = "application/octet-stream;charset=utf8";
HttpContext.Current.Response.WriteFile(BP.Tools.DealString.DealStr( fileManager.MyFilePath) );
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
}
}
void btn_DownLoad_Zip(object sender, EventArgs e)
{
try
{
BP.Sys.FrmAttachmentDBs dbs = new BP.Sys.FrmAttachmentDBs();
dbs.Retrieve(FrmAttachmentDBAttr.FK_FrmAttachment, this.FK_FrmAttachment,
FrmAttachmentDBAttr.RefPKVal, this.PKVal);
if (dbs.Count == 0)
{
this.Response.Write("文件不存在,不需打包下载。");
return;
}
string zipName = this.WorkID + "_" + DateTime.Now.ToString("yyyyMMddHHmmssffff");
string basePath = Server.MapPath("//DataUser//Temp");
string tempPath = basePath + "//" + WebUser.No;
string zipPath = basePath + "//" + WebUser.No;
string zipFile = zipPath + "//" + zipName + ".zip";
//删除临时文件,保证一个用户只能存一份,减少磁盘占用空间
if (System.IO.Directory.Exists(tempPath) == true)
System.IO.Directory.Delete(tempPath, true);
//根据路径创建文件夹
if (System.IO.Directory.Exists(zipPath) == false && zipFile.Contains(WebUser.No) == true)
System.IO.Directory.CreateDirectory(zipPath);
//copy文件临时文件夹
tempPath = tempPath + "//" + this.WorkID;
if (System.IO.Directory.Exists(tempPath) == false && tempPath.Contains(WebUser.No) == true)
System.IO.Directory.CreateDirectory(tempPath);
foreach (FrmAttachmentDB db in dbs)
{
string copyToPath = tempPath;
if (!File.Exists(db.FileFullName)) continue;
if (!string.IsNullOrEmpty(db.Sort))
{
copyToPath = tempPath + "//" + db.Sort;
if (System.IO.Directory.Exists(copyToPath) == false && copyToPath.Contains(WebUser.No) == true)
System.IO.Directory.CreateDirectory(copyToPath);
}
//新文件目录
copyToPath = copyToPath + "//" + db.FileName;
File.Copy(db.FileFullName, copyToPath, true);
}
//执行压缩
(new FastZip()).CreateZip(zipFile, tempPath, true, "");
//删除临时文件夹
if (tempPath.Contains(WebUser.No) == false)
throw new Exception("非法路径");
System.IO.Directory.Delete(tempPath, true);
//显示出下载超链接
//BP.Web.Controls.BPHyperLink hLink = (BP.Web.Controls.BPHyperLink)this.Pub1.FindControl("H_LINK_Btn");
//BP.PubClass.DownloadFile(zipFile, this.WorkID + ".zip");
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
}
private string GetRealPath(string fileFullName)
{
bool isFile = false;
string downpath = "";
try
{
//如果相对路径获取不到可能存储的是绝对路径
FileInfo downInfo = new FileInfo(Server.MapPath("~/" + fileFullName));
isFile = true;
downpath = Server.MapPath("~/" + fileFullName);
}
catch (PathTooLongException)
{
FileInfo downInfo = new FileInfo(fileFullName);
isFile = true;
downpath = fileFullName;
}
if (!isFile)
{
throw new Exception("没有找到下载的文件路径!");
}
return downpath;
}
}
}