微信企业号开发:上传文件错误44001,"errmsg":"empty media data,

上传文件是经常出现错误"errcode":44001,"errmsg":"empty media data

对照文档一直很难发发小错误,最后才发现是因为缺少了回车换行符

1开始boundary之后需要一个回车换行

2Content-Type之后需要两个回车换行

3文件内容结束后需要一个回车换行

4结束boundary之后需要一个回车换行

  /// 
        /// 执行带文件上传的HTTP POST请求。
        /// 
        /// 请求地址       
        /// 请求文件参数
        /// HTTP响应
        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);
            }
        }

 

你可能感兴趣的:(微信企业号开发)