/// <summary> /// 准备接收文件传输 /// </summary> /// <param name="pfile"></param> public void ReceiveFile(IMLibrary3.Protocol.P2PFileMsg pfile) { TFileInfo tFileInfo = new TFileInfo(); tFileInfo.Name = pfile.Name; tFileInfo.Length = pfile.Length; tFileInfo.Extension = pfile.Extension; tFileInfo.MD5 = pfile.MD5; OurMsg.Controls.FileTransmit ft = new Controls.FileTransmit(); ft.P2PFileTransmit = new p2pFileClient(Global.FileTransmitServerEP, tFileInfo); ft.fileTransmitCancel += new OurMsg.Controls.FileTransmit.fileTransmitEventHandler(ft_fileTransmitCancel); ft.P2PFileTransmit.GetIPEndPoint += new FileTransmitBase.GetIPEndPointEventHandler(P2PFileTransmit_GetIPEndPoint); ft.fileTransmitted += new OurMsg.Controls.FileTransmit.fileTransmitEventHandler(ft_fileTransmitted); flowLayoutPanel1.Controls.Add(ft); }
private JSONObject jSONObject = null; //用于获取文件上传附件中的文件名称 #region 业务函数 /// <summary> /// 上传附件方法 /// </summary> /// <param name="fileName"></param> /// <param name="dataBuff"></param> /// <returns></returns> private FileUploadResult UploadAttachment(string fileName, byte[] dataBuff) { // 初始化上传下载服务,这个Service会根据Cloud配置自动上传到对应的文件服务器 var service = new UpDownloadService(); int len = 0, less = 0; string fileId = null; byte[] buff = null; while (len < dataBuff.Length) { // 文件服务器采用分段上传,每次上传4096字节, 最后一次如果不够则上传剩余长度 less = (dataBuff.Length - len) >= 4096000 ? 4096000 : (dataBuff.Length - len); buff = new byte[less]; Array.Copy(dataBuff, len, buff, 0, less); len += less; using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buff)) { TFileInfo tFile = new TFileInfo() { FileId = fileId, FileName = fileName, CTX = this.Context, Last = len >= dataBuff.Length,//标记是否为文件的最后一个片段 Stream = ms }; var result = service.UploadAttachment(tFile); // 注意点:上传时fileId传入null为新文件开始,会返回一个文件的fileId,后续采用这个fileId标识均为同一文件的不同片段。 fileId = result.FileId; if (!result.Success) { return(result); } } } return(new FileUploadResult() { Success = true, FileId = fileId }); }
private void SetRecControl(TransmitState State, TFileInfo fileinfo) { if (State == TransmitState.Transmitting) { this.progressBar1.Value = Convert.ToInt32(((decimal)fileinfo.CurrLength / fileinfo.Length) * 100); this.labelFileLengthString.Text = IMLibrary3.Operation.Calculate.GetSizeStr(fileinfo.CurrLength) + "/" + fileinfo.LengthStr; } else if (State == TransmitState.Connected) { linkLabelOffline.Visible = false; if (isSend) { this.labelRequest.Text = "正在发送文件..."; } else { this.labelRequest.Text = "正在接收文件..."; } if (fileinfo.connectedType == ConnectedType.UDPLocal) { labelConType.Text = "[UDP直连]"; } else if (fileinfo.connectedType == ConnectedType.UDPRemote) { labelConType.Text = "[UDP直连]"; } else { labelConType.Text = "[服务器中转连接]"; } } else if (State == TransmitState.Over) { if (fileTransmitted != null) { fileTransmitted(this); //触发文件 } } }