艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)

时间:2023-03-08 19:57:20
艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)

该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开源,作者是英国的,开发时间5年多,框架很稳定。

项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload

咨询qq:286275658

文件下载的思路

演示程序下载地址:http://pan.baidu.com/s/1geVfmcr

艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)

点击左侧列表的代码:

  itemID = listBox2.Text;
            lblID.Text = listBox2.Text;

            Reload(itemID);
   private void Reload(string destDir)
        {
            flowLayoutPanel1.Controls.Clear(); 

            FileContract body = new FileContract();
            body.Comment = destDir;

            FileDirectory docDir = AppOutter.TcpConn.SendReceiveObject<FileContract, FileDirectory>(, body);

            ;
            //给当前文件列表变量赋值
            CurrentFileList = docDir.FileList;

            foreach (FileDetail fileDetail in docDir.FileList)
            {
                ImageItemButton itemButton = new ImageItemButton();

                string extension = Path.GetExtension(fileDetail.Name);

                //在参数中把扩展名转化为小写
                itemButton.ButtonImage = GetIcoByExtension(extension.ToLower());

                itemButton.ButtonText = fileDetail.Name;
                itemButton.Name = "ItemButton" + i;
                //把文件信息赋值给显示控件
                itemButton.FileInfo = fileDetail;

                itemButton.NewClick += new EventHandler<EventArgs>(itemButton_NewClick);
                itemButton.NewMouseLeave += new EventHandler<EventArgs>(itemButton_NewMouseLeave);
                itemButton.NewMouseHover += new EventHandler<EventArgs>(itemButton_NewMouseHover);

                //文件下载事件
                itemButton.NewDownFile += new EventHandler<FileEventArgs>(itemButton_NewDownFile);
                itemButton.NewOpenFile += new EventHandler<FileEventArgs>(itemButton_NewOpenFile);
                itemButton.NewDoubleClick += new EventHandler<FileEventArgs>(itemButton_NewDoubleClick);
                itemButton.NewRemoveFile += new EventHandler<FileEventArgs>(itemButton_NewRemoveFile);

                this.flowLayoutPanel1.Controls.Add(itemButton);

                i++;
            }
            //加载当前文件夹下的内容

            )
            {
                Label label = new Label();
                label.Text = "欢迎使用文件上传下载系统";
                label.Width = ;
                label.Height = ;
                label.ForeColor = Color.Blue;
                label.Font = , label.Font.Style);

                this.flowLayoutPanel1.Controls.Add(label);
            }

        }

点击左侧列表后,会把相对应的子文件夹名(路径名),传递给服务器。服务器根据子文件夹名,获取子文件夹中文件列表,发送给客户端,客户端进行显示。

用户在右侧列表中,点击某个文件,获取文件名。并根据路径名和文件名,向服务器请求下载该文件

代码大致如下:

    void itemButton_NewDownFile(object sender, FileEventArgs e)
        {
            openFlag = false;

            string fileName = e.FileInfo.Name;
            long fileSize = e.FileInfo.Size;

            ulong theFileSize = Convert.ToUInt32(fileSize);

            //获取当前文件扩展名
            string extentName = Path.GetExtension(fileName);
            try
            {
                string savePath = FileHelper.GetPathToSave("选择保存路径", fileName, null);

                if (savePath != null)
                {

                    //如果在弹出窗口中,用户改动了名字,需要手动加上扩展名
                    if (!savePath.EndsWith(extentName))
                    {
                        savePath = savePath + extentName;
                    }

                    //取得目录所在的相对位置 如: 201011\123456\文件.txt
                    string fileUri = itemID + @"\" + fileName;

                    try
                    {
                        FileInfoContract contract = new FileInfoContract(savePath, fileUri);

                        AppOutter.TcpConn.SendObject("DownloadFile", contract);

                    }
                    catch (Exception ee)
                    {
                        MessageBox.Show(ee.Message);
                    }
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }

qq:286275658