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);
}
}