上传文件是经常出现错误"errcode":44001,"errmsg":"empty media data
对照文档一直很难发发小错误,最后才发现是因为缺少了回车换行符
1开始boundary之后需要一个回车换行
2Content-Type之后需要两个回车换行
3文件内容结束后需要一个回车换行
4结束boundary之后需要一个回车换行
/// <summary>
/// 执行带文件上传的HTTP POST请求。
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="fileParams">请求文件参数</param>
/// <returns>HTTP响应</returns>
public string DoPostFile(string url, FileItem fileParams)
{
try
{
string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
string startboundary = "--" + boundary;
string endboundary = "--" + boundary + "--";
HttpWebRequest req = GetWebRequest(url, "POST");
req.ContentType = "multipart/form-data;boundary=" + boundary;
System.IO.Stream reqStream = req.GetRequestStream();
//开始结束的换行符不能少,否则是44001,"errmsg":"empty media data,
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n" + endboundary + "\r\n");
string name = fileParams.GetFileName();
string filename = fileParams.GetFileName();
//结束的两个换行符不能少,否则是44001,"errmsg":"empty media data,
string fileTemplate = "Content-Disposition: form-data; name=\"{0}\";filename=\"{1}\"; filelength={2}\r\nContent-Type: {3}\r\n\r\n";
FileItem fileItem = fileParams;
byte[] fileBytes = fileItem.GetContent();
StringBuilder sb = new StringBuilder();
sb.Append(startboundary);
sb.Append("\r\n");
sb.Append(string.Format(fileTemplate, name, filename, fileBytes.Length, fileItem.GetMimeType()));
// LogInfo.Error("sb.ToString()=" + sb.ToString());
byte[] Content = Encoding.UTF8.GetBytes(sb.ToString());
//开始标志
reqStream.Write(Content, 0, Content.Length);
//文件内容
reqStream.Write(fileBytes, 0, fileBytes.Length);
//结束标志
reqStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
// LogInfo.Error("endBoundaryBytes=" + endboundary);
reqStream.Close();
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
return GetResponseAsString(rsp, encoding);
}
catch (WebException ex)
{
LogInfo.Error("调用微信接口异常WebException,this._timeout" + this._timeout + ",url=" + url, ex);
ReturnResult rt = new ReturnResult();
rt.errcode = 41001;
rt.errmsg = "调用微信接口异常WebException;" + ex.Message;
return Tools.ToJsonString(rt);
}
}