文件上传下载
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Syswin.Control;
using System.Windows.Forms;
using StarWind;
using StarWind.Lang;
using StarWind.Controls;
using StarWind.Window;
using Syswin.Property.Include.Cache.Common;
using System.Data;
using System.IO;
using System.Net;
using System.Drawing;
namespace Syswin.Service.ServiceReceiveCenter
{
//附件
public class AaffixControl : CtrlETSCoreFrame
{
public StarPanel pnlAaffixBtn;
private void InitializeComponent()
{
this.pnlAaffixBtn = new StarWind.Controls.StarPanel();
this.pnlAaffix = new StarWind.Controls.StarPanel();
this.SuspendLayout();
//
// pnlAaffixBtn
//
this.pnlAaffixBtn.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlAaffixBtn.Location = new System.Drawing.Point(0, 185);
this.pnlAaffixBtn.Name = "pnlAaffixBtn";
this.pnlAaffixBtn.Padding = new System.Windows.Forms.Padding(1, 1, 1, 1);
this.pnlAaffixBtn.Size = new System.Drawing.Size(798, 28);
this.pnlAaffixBtn.TabIndex = 0;
//
// pnlAaffix
//
this.pnlAaffix.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlAaffix.Name = "pnlAaffix";
this.pnlAaffix.Padding = new System.Windows.Forms.Padding(1, 1, 1, 1);
this.pnlAaffix.Size = new System.Drawing.Size(798, 185);
this.pnlAaffix.TabIndex = 1;
//
// AaffixControl
//
this.Controls.Add(this.pnlAaffix);
this.Controls.Add(this.pnlAaffixBtn);
this.Name = "AaffixControl";
this.Size = new System.Drawing.Size(798, 213);
this.ResumeLayout(false);
}
public CtrlCommandBar cmdAaffix = null;
private System.Windows.Forms.OpenFileDialog openFileDialogWin = new System.Windows.Forms.OpenFileDialog();
private System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog();
//表名
private string _strTableName;
public string strTableName
{
get { return _strTableName; }
set { _strTableName = value; }
}
//关联的外键
private string _strRowID;
public string strRowID
{
get { return _strRowID; }
set { _strRowID = value; }
}
//附件ID
private string strAffixID = "";
private string strAffixName = "";
//新文件名称
private string _strNewFileName;
public string strNewFileName
{
get { return _strNewFileName; }
set { _strNewFileName = value; }
}
private bool bContinueCancel = false;
private StarPanel pnlAaffix;
private ClosedEventHandler handler2 = null;
public AaffixControl(string strTableName, string strRowID)
{
InitializeComponent();
this.strTableName = strTableName;
this.strRowID = strRowID;
this.ISywinControl = ISywinControl;
LoadThisAaffix();
GetAffixData();
}
Syswin.Property.Include.Cache.Common.ServiceTypeCache STC = new Syswin.Property.Include.Cache.Common.ServiceTypeCache();
/// <summary>
/// 加载 附件功能按钮
/// </summary>
private void LoadThisAaffix()
{
if (!Syswin.Include.Notice.Message.CheckRight("_WordAaffix"))
return;
cmdAaffix = new CtrlCommandBar(Syswin.Include.Notice.Message.GetSetting("_WordAaffix").PointList);//功能点自动创建命令条
cmdAaffix.Dock = DockStyle.Top;
cmdAaffix.DefaultClickEvent = (str) =>
{
if (str.Equals("_WordAaffixAAppend"))//增加
{
if (this.strRowID.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QingXianTianJiaWenTi)+@"!");
return;
}
//显示打开窗体文件框
//openFileDialogWin.DefaultExt = "(*.xls)|*.xls|";
//openFileDialogWin.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx|(*.txt)|*.txt";
if (openFileDialogWin.ShowDialog() == DialogResult.OK)
{
Syswin.Include.LoadProvider.ShowLoad(this,
() =>
{
UploadFile();
});
}
}
if (str.Equals("_WordAaffixARemove"))//删除
{
Syswin.Include.LoadProvider.ShowLoad(this,
() =>
{
DelData();
});
}
if (str.Equals("_WordAaffixAOpen"))//打开附件
{
if (this.strAffixID.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QingXuanZeYaoDaKaiDeFuJian)+@"!");
return;
}
Syswin.Include.LoadProvider.ShowLoad(this,
() =>
{
OpenFile();
});
}
if (str.Equals("_WordAaffixADownload"))//下载附件
{
if (this.strAffixID.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QingXuanZeYaoXiaZaiDeFuJian)+@"!");
return;
}
//显示打开窗体文件框
//saveFileDialog.DefaultExt = "(*.xls)|*.xls";
//saveFileDialog.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx|(*.txt)|*.txt";
saveFileDialog.FileName = this.strAffixName;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Syswin.Include.LoadProvider.ShowLoad(this,
() =>
{
DownFile();
});
}
}
};
pnlAaffixBtn.Controls.Add(cmdAaffix);
}
/// <summary>
/// 打开文件
/// </summary>
private void OpenFile()
{
if (this.strAffixID.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QingXuanZeYaoDaKaiDeWenJian)+@"!");
return;
}
string strLoadAdress = @"C:\Windows\Temp\";//系统临时目录
try
{
//下载文件到系统临时目录下
string strSql = string.Format("select FileName from __Attachment where ID='{0}'", this.strAffixID);
strLoadAdress = strLoadAdress + this.CurrentUser.Cdmp.GetScalar(Syswin.Config.System.DataBase.ETSProperty, strSql);
Stream stream = Syswin.Property.Include.Cache.Common.ServiceTypeCache.Current(Syswin.Config.System.ErrorConfig.SyswinModule.ResN).DownFile(this.strTableName, this.strAffixID);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
FileStream fs = new FileStream(strLoadAdress, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
//打开文件
System.Diagnostics.Process.Start(strLoadAdress);
}
catch (Exception ex)
{
string strEx = ex.Message;
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianXiaZaiShiBai)+@","+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianYiDiuShi)+@"!");
}
}
/// <summary>
/// 删除文件信息
/// </summary>
private void DelData()
{
if (this.strAffixID.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QingXuanZeYaoShanChuDeFuJian)+@"!");
return;
}
string Title = ""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.QueDingShanChu)+@"?";
MessageDialog.ShowMessage(handler2 = delegate(object x, ClosedEventArgs ex)
{
if (ex.DialogResult == DialogResult.OK)
{
bContinueCancel = true;
}
else
{
bContinueCancel = false;
}
}
, Title, MessageBoxButtons.OKCancel, MessageBoxDefaultButton.Button2);
if (!bContinueCancel)
{
return;
}
else
{
string strSqlDel = string.Format("delete __Attachment where ID='{0}'", this.strAffixID);
int result = this.CurrentUser.Cdmp.ExecuteSql(Syswin.Config.System.DataBase.ETSProperty, strSqlDel);
if (result <= 0)
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.ShanChuShiBai)+@"!");
return;
}
//删除路径下的文件
bool bResult = Syswin.Property.Include.Cache.Common.ServiceTypeCache.Current(Syswin.Config.System.ErrorConfig.SyswinModule.ResN).DelData(this.strTableName, this.strAffixID);
if (bResult)
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianShanChuChengGong)+@"!");
GetAffixData();
this.strAffixID = "";
}
else
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianShanChuShiBai)+@"!");
}
}
}
/// <summary>
/// 增加上传文件的信息
/// </summary>
private void CreateFileData()
{
string strFileName = openFileDialogWin.SafeFileName;
string strFilePath = openFileDialogWin.FileName;
string strSqlAaffix = string.Format(@"insert into __Attachment(Id, TableName, RowId, FileName, Version, CreatorId, Creator, CreateTime, ModifierId, Modifier, ModifyTime, Status, FilePath, Remark, SortOrder)
values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}',{14})",
this.strAffixID, this.strTableName, this.strRowID, strFileName, "",
this.CurrentUser.EmployeeId, this.CurrentUser.EmployeeName, this.CurrentUser.ServerTime, "", "",
"", "", strFilePath, "", 0);
int result = this.CurrentUser.Cdmp.ExecuteSql(Syswin.Config.System.DataBase.ETSProperty, strSqlAaffix);
if (result <= 0)
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.ShangChuanShiBai)+@"!");
return;
}
GetAffixData();
}
/// <summary>
/// 上传文件
/// </summary>
private void UploadFile()
{
byte[] file = null;
string strFileNamePath = openFileDialogWin.FileName;
this.strAffixID = this.CurrentUser.GetNewId();
string FileName = openFileDialogWin.SafeFileName;
try
{
string value = this.CurrentUser.Cdmp.GetScalar(Syswin.Config.System.DataBase.ETSProperty, string.Format("select ID from __Attachment where RowId='{0}' and TableName='{1}' and FileName='{2}'", this.strRowID, this.strTableName, FileName));
if (!value.IsNullOrEmpty())
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.YiCunZaiXiangTongDeWenJian)+@"!");
// //删除路径下的文件
// bool bResultValue = Syswin.Property.Include.Cache.Common.ServiceTypeCache.Current(Syswin.Config.System.ErrorConfig.SyswinModule.ResN).DelData(this.strTableName, this.strAffixID);
// if (!bResultValue)
return;
}
FileStream fs = new FileStream(strFileNamePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
int streamLength = (int)fs.Length;
file = new byte[streamLength];
fs.Read(file, 0, streamLength);
fs.Close();
bool bResult = Syswin.Property.Include.Cache.Common.ServiceTypeCache.Current(Syswin.Config.System.ErrorConfig.SyswinModule.ResN).UploadFile(this.strTableName, this.strAffixID, file, FileName);
if (bResult)
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.ShangChuanWenJianChengGong)+@"!");
CreateFileData();
}
else
{
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.ShangChuanWenJianShiBai)+@"!");
}
}
catch (Exception ex)
{
string strEx = ex.Message;
}
}
/// <summary>
/// 下载文件
/// </summary>
private void DownFile()
{
string strDir = saveFileDialog.FileName;
//Stream postStream = myWebClient.OpenWrite(strDir, "PUT");
try
{
Stream stream = Syswin.Property.Include.Cache.Common.ServiceTypeCache.Current(Syswin.Config.System.ErrorConfig.SyswinModule.ResN).DownFile(this.strTableName, this.strAffixID);
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
FileStream fs = new FileStream(strDir, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
}
catch (Exception ex)
{
string strEx = ex.Message;
MessageDialog.ShowMessage(""+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianXiaZaiShiBai)+@","+Syswin.Control.Cache.LangProvider.GetLang(Syswin.Control.Lang.Langs_SyswinService.LangList.WenJianYiDiuShi)+@"!");
}
}
/// <summary>
/// 更新当前附件列表
/// </summary>
public void GetAffixData()
{
pnlAaffix.Controls.Clear();
string strSql = string.Format("select ID,FileName from __Attachment where TableName='{0}' and RowId='{1}'", this.strTableName, this.strRowID);
DataTable dt = this.CurrentUser.Cdmp.GetDataTable(Syswin.Config.System.DataBase.ETSProperty, strSql);
cmdAaffix.SetCommandEnabled("_WordAaffixARemove", "", false);
cmdAaffix.SetCommandEnabled("_WordAaffixAOpen", "", false);
cmdAaffix.SetCommandEnabled("_WordAaffixADownload", "", false);
int y = 0;
int Iwidth = 0;
int INowWidth = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
LinkLabel link = new LinkLabel();
link.AutoSize = true;
link.LinkVisited = true;
link.VisitedLinkColor = System.Drawing.Color.Blue;
link.Text = dt.Rows[i]["FileName"].ToString();
link.Tag = dt.Rows[i]["ID"].ToString();
link.Name = dt.Rows[i]["ID"].ToString();
link.Click += new EventHandler(link_Click);
link.MouseDoubleClick += new MouseEventHandler(link_MouseDoubleClick);
if (Iwidth == 0)
{
Iwidth = Iwidth + 8;
}
else
{
Iwidth = Iwidth + (INowWidth + 8);
}
if (Iwidth > (this.pnlAaffix.Width) || INowWidth > (this.pnlAaffix.Width))
{
if (y != 0 || Iwidth != 8)
{
y++;
link.Location = new Point(8, 8 + (28 * (y)));
Iwidth = 0;
}
else
{
link.Location = new Point(Iwidth, 8 + (28 * (y)));
}
}
else if (Iwidth > this.pnlAaffix.Width)
{
link.Location = new Point(8, 8 + (28 * (y)));
y++;
Iwidth = 0;
}
else
{
link.Location = new Point(Iwidth, 8 + (28 * (y)));
}
pnlAaffix.Controls.Add(link);
INowWidth = link.Size.Width;
}
}
void link_MouseDoubleClick(object sender, MouseEventArgs e)
{
LinkLabel lk = (LinkLabel)sender;
this.strAffixID = lk.Tag.ToString();
this.strAffixName = lk.Text;
Syswin.Include.LoadProvider.ShowLoad(this,
() =>
{
OpenFile();
});
}
LinkLabel lk = null;
void link_Click(object sender, EventArgs e)
{
if (lk != null)
lk.VisitedLinkColor = System.Drawing.Color.Blue;
lk = (LinkLabel)sender;
lk.VisitedLinkColor = System.Drawing.Color.Red;
this.strAffixID = lk.Tag.ToString();
this.strAffixName = lk.Text;
cmdAaffix.SetCommandEnabled("_WordAaffixARemove", "", true);
cmdAaffix.SetCommandEnabled("_WordAaffixAOpen", "", true);
cmdAaffix.SetCommandEnabled("_WordAaffixADownload", "", true);
}
}
}
服务端:
/// <summary>
/// 上传文件
/// </summary>
public bool UploadFile(string strTableName, string strAffixID, byte[] file, string fileName)
{
string struriString = GetServiceRoot + @"Data\Attachment\" + strTableName + @"\" + strAffixID + ".dat";//文件路径
//string strNewFileName = strAffixID + strfileNamePath.Substring(strfileNamePath.LastIndexOf("."));
// 创建WebClient实例
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
// 要上传的文件
//FileStream fs = OpenFile();
//FileStream fs = File.Create(struriString, file.Length);
try
{
//BinaryReader r = new BinaryReader(fs);
//使用UploadFile方法可以用下面的格式
//byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(struriString, "PUT");
if (postStream.CanWrite)
{
postStream.Write(file, 0, file.Length);
postStream.Close();
//fs.Close();
return true;
}
else
{
//MessageBox.Show("文件目前不可写!");
return false;
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
//fs.Close();
return false;
}
}
/// <summary>
/// 删除文件信息
/// </summary>
public bool DelData(string strTableName, string strAffixID)
{
string strURL = System.Windows.Forms.Application.StartupPath.Substring(0, System.Windows.Forms.Application.StartupPath.Length - 10) + @"\Data\Attachment\" + strTableName + @"\" + strAffixID + ".dat";//文件路径
try
{
//删除路径下的文件
if (System.IO.File.Exists(strURL))
{
System.IO.File.Delete(strURL);
}
return true;
}
catch (Exception ex)
{
string strEx = ex.Message;
return false;
}
}
/// <summary>
/// 下载文件
/// </summary>
public MemoryStream DownFile(string strTableName, string strAffixID)
{
byte[] bytefile = null;
MemoryStream mymemorystream = null;
string strURL = System.Windows.Forms.Application.StartupPath.Substring(0, System.Windows.Forms.Application.StartupPath.Length - 10) + @"\Data\Attachment\" + strTableName + @"\" + strAffixID + ".dat";//文件路径
FileStream fs = new FileStream(strURL, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (!System.IO.File.Exists(strURL))
{
//MessageDialog.ShowMessage("该文件已丢失!");
return mymemorystream;
}
//WebClient client = new WebClient();
//string fileName = strURL.Substring(strURL.LastIndexOf("\\") + 1); //被下载的文件名
//string Path = strDir; //另存为的绝对路径+文件名
try
{
int streamLength = (int)fs.Length;
bytefile = new byte[streamLength];
fs.Read(bytefile, 0, streamLength);
mymemorystream = new MemoryStream(bytefile, 0, bytefile.Length);
fs.Close();
return mymemorystream;
//client.DownloadFile(strURL, Path);
//return true;
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "Error");
string strEx = ex.Message;
return mymemorystream;
}
}
/// <summary>
/// 打开文件
/// </summary>
/// <returns></returns>
public string OpenFile(string strTableName, string strAffixID)
{
try
{
string strFilename = System.Windows.Forms.Application.StartupPath.Substring(0, System.Windows.Forms.Application.StartupPath.Length - 10) + @"\Data\Attachment\" + strTableName + @"\" + strAffixID + ".dat";//文件路径
//System.Diagnostics.Process.Start(strFilename);
return strFilename;
}
catch (Exception ex)
{
string strEx = ex.Message;
return "";
}
}