
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)
该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开源,作者是英国的,开发时间5年多,框架很稳定。
项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload
咨询qq:286275658
文件下载的思路
演示程序下载地址:http://pan.baidu.com/s/1geVfmcr
点击左侧列表的代码:
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