微信企業號開發:上傳檔案錯誤44001,"errmsg":"empty media data,
阿新 • • 發佈:2018-12-15
上傳檔案是經常出現錯誤"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); } }