文件上传下载

来源:互联网 发布:世界聊天软件排行 编辑:程序博客网 时间:2024/05/21 23:01

客户端:

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 "";
           }
       }

原创粉丝点击