微信协议版上传图片问题问题

lu276174175 2016-08-20 07:55:09
public static string HttpPostData(string url, string filePath, string fileName, string fileType, long fileSize, string msg_json, string pass_ticket)
{
string responseContent;
var memStream = new MemoryStream();

var webRequest = (HttpWebRequest)WebRequest.Create(url);
// 边界符
var boundary = "----WebKitFormBoundaryf4FaZBEjzTpYgbNr";


// 设置属性
webRequest.Method = "POST";
//webRequest.Timeout = 0;
webRequest.ContentType = "multipart/form-data; boundary=" + boundary;

// 边界符
var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

// 最后的结束符
var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");


//写入开始边界符
memStream.Write(beginBoundary, 0, beginBoundary.Length);

// 写入字符串的Key
var stringKeyHeader = "\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"" +
"\r\n\r\n{1}\r\n";

//写入id
var header_id = string.Format(stringKeyHeader, "id", "WU_FILE_0");
var headerbytes_id = Encoding.UTF8.GetBytes(header_id);
memStream.Write(headerbytes_id, 0, headerbytes_id.Length);

//写入name
var header_name = string.Format(stringKeyHeader, "name", fileName);
var headerbytes_name = Encoding.UTF8.GetBytes(header_name);
memStream.Write(headerbytes_name, 0, headerbytes_name.Length);

//写入type
var header_type = string.Format(stringKeyHeader, "type", "image/" + fileType);
var headerbytes_type = Encoding.UTF8.GetBytes(header_type);
memStream.Write(headerbytes_type, 0, headerbytes_type.Length);

//写入lastModifiedDate
var header_lastModifiedDate= string.Format(stringKeyHeader, "lastModifiedDate", "Thu Aug 04 2016 20:37:17 GMT+0800 (中国标准时间)");
var headerbytes_lastModifiedDate = Encoding.UTF8.GetBytes(header_lastModifiedDate);
memStream.Write(headerbytes_lastModifiedDate, 0, headerbytes_lastModifiedDate.Length);

//写入size
var header_size = string.Format(stringKeyHeader, "size", fileSize);
var headerbytes_size = Encoding.UTF8.GetBytes(header_size);
memStream.Write(headerbytes_size, 0, headerbytes_size.Length);

//写入mediatype
var header_mediatype = string.Format(stringKeyHeader, "mediatype", "pic");
var headerbytes_mediatype = Encoding.UTF8.GetBytes(header_mediatype);
memStream.Write(headerbytes_mediatype, 0, headerbytes_mediatype.Length);

//写入uploadmediarequest
var header_up = string.Format(stringKeyHeader, "uploadmediarequest", msg_json);
var headerbytes_up = Encoding.UTF8.GetBytes(header_up);
memStream.Write(headerbytes_up, 0, headerbytes_up.Length);

////写入webwx_data_ticket
//var header_data_ticket = string.Format(stringKeyHeader, "webwx_data_ticket", "gSdqqtayKTVA7M2vHCfE+JZH");
//var headerbytes_data_ticket = Encoding.UTF8.GetBytes(header_data_ticket);
//memStream.Write(headerbytes_data_ticket, 0, headerbytes_data_ticket.Length);

//写入pass_ticket
var header_pass_ticket = string.Format(stringKeyHeader, "pass_ticket", pass_ticket);
var headerbytes_pass_ticket = Encoding.UTF8.GetBytes(header_pass_ticket);
memStream.Write(headerbytes_pass_ticket, 0, headerbytes_pass_ticket.Length);

//写入filename
const string filePartHeader =
"Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
"Content-Type: {2}\r\n\r\n";// 写入文件
var header = string.Format(filePartHeader, "filename", fileName, "image/" + fileType);
var headerbytes = Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);

var buffer = new byte[1024];
int bytesRead; // =0

while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}

//memStream.Write(file_json, 0, file_json.Length);

// 写入最后的结束边界符
memStream.Write(endBoundary, 0, endBoundary.Length);

webRequest.ContentLength = memStream.Length;

var requestStream = webRequest.GetRequestStream();

memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();

requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();

var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();

using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
Encoding.GetEncoding("utf-8")))
{
responseContent = httpStreamReader.ReadToEnd();
}

fileStream.Close();
httpWebResponse.Close();
webRequest.Abort();

return responseContent;
}

返回结果是

{
"BaseResponse": {
"Ret": 1,
"ErrMsg": ""
}
,
"MediaId": "",
"StartPos": 0,
"CDNThumbImgHeight": 0,
"CDNThumbImgWidth": 0
}
请各位大神看看什么问题,
...全文
1121 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeruSalem 2017-11-05
  • 打赏
  • 举报
回复
解决微信图片上传问题 QQ11436957
爱探索 2017-11-04
  • 打赏
  • 举报
回复
上传图片1200,请问大神怎么处理
WSZXF92 2017-10-19
  • 打赏
  • 举报
回复
请问各位解决了没?我也遇到这个问题。
lengfeng1990723 2017-07-12
  • 打赏
  • 举报
回复
引用 1 楼 zxiaoxuan 的回复:
你好.楼主,,我也是讨论微信这方面的.是新手.不知能不能一起交流下.有几个问题要请教 你..加下我的QQ:37121520.谢谢朋友
请问搞定没
lengfeng1990723 2017-07-12
  • 打赏
  • 举报
回复
请问解决了嘛
fjlinjinlong 2017-05-26
  • 打赏
  • 举报
回复
我也是遇到返回MediaId 为空,请问楼主已经解决问题了吗啊
chenmotiandi 2017-04-11
  • 打赏
  • 举报
回复
我也是遇到返回MediaId 为空,请问楼主已经解决问题了吗啊
毛小怪 2017-03-14
  • 打赏
  • 举报
回复
楼主好,请问这个问题解决了吗?
zxiaoxuan 2016-08-29
  • 打赏
  • 举报
回复
你好.楼主,,我也是讨论微信这方面的.是新手.不知能不能一起交流下.有几个问题要请教 你..加下我的QQ:37121520.谢谢朋友

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧