FanFou.SDK.Http.AsyncHttpRequest.GetPostFileRequestStreamCallback C# (CSharp) Method

GetPostFileRequestStreamCallback() public method

获取POSTFILE流,并发送数据,调用回调
public GetPostFileRequestStreamCallback ( IAsyncResult asynchronousResult ) : void
asynchronousResult IAsyncResult
return void
        public void GetPostFileRequestStreamCallback(IAsyncResult asynchronousResult)
        {
            var request = (HttpWebRequest)asynchronousResult.AsyncState;
            Stream stream = request.EndGetRequestStream(asynchronousResult);

            #region 生成流

            Files files = Files;

            string boundary = string.Concat("-----------------------------", Util.GenerateRndNonce());
            request.ContentType = string.Concat("multipart/form-data; boundary=", boundary);

            using (var ms = new MemoryStream())
            {
                byte[] boundaryData = Charset.GetBytes("\r\n--" + boundary + "\r\n");
                if (Parameters != null && Parameters.Items.Count != 0)
                {
                    //写入参数
                    const string parameterData = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                    foreach (var p in Parameters.Items)
                    {
                        string item = string.Format(parameterData, p.Key, p.Value);
                        byte[] data = Charset.GetBytes(item);
                        ms.Write(boundaryData, 0, boundaryData.Length);
                        ms.Write(data, 0, data.Length);
                    }
                }

                if (files != null)
                {
                    //写入文件数据
                    const string fileData =
                        "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
                    foreach (var p in files.Items)
                    {
                        if (p.Value != null)
                        {
                            string item = string.Format(fileData, p.Key, p.Value.FileName, p.Value.ContentType);
                            byte[] data = Charset.GetBytes(item);
                            ms.Write(boundaryData, 0, boundaryData.Length);
                            ms.Write(data, 0, data.Length);

                            p.Value.WriteTo(ms);
                        }
                    }
                }

                //写入结束线
                boundaryData = Charset.GetBytes("\r\n--" + boundary + "--\r\n");
                ms.Write(boundaryData, 0, boundaryData.Length);
                ms.WriteTo(stream);
                stream.Close();
            }

            #endregion

            request.BeginGetResponse(AsyncResponseCallback, request);
        }
    }