1. 程式人生 > >微信企業號開發:上傳檔案錯誤44001,"errmsg":"empty media data,

微信企業號開發:上傳檔案錯誤44001,"errmsg":"empty media data,

上傳檔案是經常出現錯誤"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);
            }
        }