示例#1
0
        /// <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);
        }
示例#2
0
        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
            });
        }
示例#3
0
        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);                         //触发文件
                }
            }
        }