c++ 企业微信上传临时素材,提示errcode\":44001,\"errmsg\":\"empty media data

ok632767947 2017-04-10 04:47:45

int CHttpClient::ExecuteRequestUpload(LPCTSTR strFileName, LPCTSTR strUrl, string &strResponse)  
{
CString strServer;
CString strObject;
DWORD dwServiceType;
INTERNET_PORT nPort;
strResponse = "";

AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);

if(AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
{
return FAILURE;
}

CFile fTrack;
if (FALSE == fTrack.Open(strFileName, CFile::modeRead | CFile::shareDenyWrite))
return -1;

CString strRequestHeader=_T("");
CString strHTTPBoundary=_T("");
CString strPreFileData=_T("");
CString strPostFileData=_T("");

DWORD dwTotalRequestLength = 0;
DWORD dwChunkLength = 0;
DWORD dwReadLength = 0;
DWORD dwResponseLength = 0;

LPSTR szResponse = NULL;


CString strFilePath = strFileName;
int startp = strFilePath.ReverseFind('\\');
int namelen = strFilePath.GetLength()-startp-1;

CString szFileName = strFilePath.Mid(startp+1,namelen);

strHTTPBoundary = _T("-----------------------------7d86d16250370");
strRequestHeader =MakeRequestHeaders(strHTTPBoundary,strServer,nPort);
strPreFileData = MakePreFileData(strHTTPBoundary, szFileName,fTrack.GetLength());
strPostFileData = MakeRequestEnders(strHTTPBoundary);

dwTotalRequestLength = strPreFileData.GetLength() + strPostFileData.GetLength() + fTrack.GetLength();
dwChunkLength = 64 * 1024;

void* pBuffer = malloc(dwChunkLength);
if (NULL == pBuffer)
{
return -1;
}
else
{
try
{
m_pConnection = m_pSession->GetHttpConnection(strServer,
dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT,
nPort);
m_pFile = m_pConnection->OpenRequest("POST", strObject,
NULL, 1, NULL, NULL,
(dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));

m_pFile->AddRequestHeaders(strRequestHeader);
m_pFile->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE);

#ifdef _UNICODE
m_pFile->Write(W2A(strPreFileData), strPreFileData.GetLength());
#else
m_pFile->Write((LPSTR)(LPCSTR)strPreFileData, strPreFileData.GetLength());
#endif

dwReadLength = -1;
while (0 != dwReadLength)
{
dwReadLength = fTrack.Read(pBuffer, dwChunkLength);
if (0 != dwReadLength)
{
m_pFile->Write(pBuffer, dwReadLength);
}
}

#ifdef _UNICODE
m_pFile->Write(W2A(strPostFileData), strPostFileData.GetLength());
#else
m_pFile->Write((LPSTR)(LPCSTR)strPostFileData, strPostFileData.GetLength());
#endif

m_pFile->EndRequest(HSR_SYNC);

dwResponseLength = m_pFile->GetLength();
while (0 != dwResponseLength)
{
szResponse = (LPSTR)malloc(dwResponseLength + 1);
szResponse[dwResponseLength] = '\0';
m_pFile->Read(szResponse, dwResponseLength);
strResponse += szResponse;
free(szResponse);
dwResponseLength = m_pFile->GetLength();
}
}
catch (CInternetException* e)
{
Clear();
DWORD dwErrorCode = e->m_dwError;
e->Delete();

DWORD dwError = GetLastError();

if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
{
return OUTTIME;
}
else
{
return FAILURE;
}
}
}

return SUCCESS;
}



LPCTSTR CHttpClient::MakeRequestHeaders( LPCTSTR strBoundary, LPCTSTR strServerName, const int nPort)
{
TCHAR strFormat[1024] = "";
static TCHAR strData[1024];

strcat(strFormat,"Accept-Language: zh-cn");
strcat(strFormat,"Content-Type: multipart/form-data;boundary=%s\r\n");
strcat(strFormat,"Connection: keep-alive\r\n");
strcat(strFormat,"Host:%s\r\n");

sprintf_s(strData,strFormat,strBoundary,strServerName);

return strData;
}

LPCTSTR CHttpClient::MakePreFileData( LPCTSTR strBoundary, LPCTSTR strFileName ,DWORD dsize)
{
TCHAR strFormat[1024] = "";
static TCHAR strData[1024];

strcat(strFormat,"--%s\r\n");
strcat(strFormat,"Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n");
strcat(strFormat,"Content-Type:image/bmp;image/jpeg;image/x-png;application/zip\r\n");
// strcat(strFormat,"Content-Transfer-Encoding:binary\r\n\r\n");

sprintf_s(strData,strFormat,strBoundary,strFileName,dsize);

return strData;
}

LPCTSTR CHttpClient::MakeRequestEnders( LPCTSTR strBoundary )
{
TCHAR strFormat[256] = "";
static TCHAR strEnd[256];

strcat(strFormat,"\r\n--%s\r\n");
// strcat(strFormat,"Content-Disposition: form-data;name =\"submitted\"\r\n\r\n");
// strcat(strFormat,"submit\r\n");
// strcat(strFormat,"--%s--\r\n");

sprintf_s(strEnd,strFormat,strBoundary);
return strEnd;
}
...全文
2574 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
蛰居散人 2017-08-22
  • 打赏
  • 举报
回复
MultipartEntityBuilder(用的是HttpClient)设置了字符集
foo1st 2017-06-30
  • 打赏
  • 举报
回复
这个是我的总结,抛砖引玉。 http://blog.csdn.net/paulorwys/article/details/74010585
foo1st 2017-06-30
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 paulorwys 的回复:] [quote=引用 6 楼 qq_29225523 的回复:] 请问问题解决了吗?我也遇到这个问题,企业号可以正常上传,企业微信就一直提示这个
算了我直接去问企业微信的客服算了。。[/quote] 人间正道是沧桑。[/quote] 写给企业微信的客服的邮件是石沉大海。 后来看到帖子,是因为MultipartEntityBuilder(用的是HttpClient)设置了字符集的缘故。 因为文件内容为二进制,所以无需指定字符集。
赵4老师 2017-06-29
  • 打赏
  • 举报
回复
引用 7 楼 paulorwys 的回复:
[quote=引用 6 楼 qq_29225523 的回复:] 请问问题解决了吗?我也遇到这个问题,企业号可以正常上传,企业微信就一直提示这个
算了我直接去问企业微信的客服算了。。[/quote] 人间正道是沧桑。
foo1st 2017-06-28
  • 打赏
  • 举报
回复
引用 6 楼 qq_29225523 的回复:
请问问题解决了吗?我也遇到这个问题,企业号可以正常上传,企业微信就一直提示这个
算了我直接去问企业微信的客服算了。。
thiskid_1412 2017-05-23
  • 打赏
  • 举报
回复
请问问题解决了吗?我也遇到这个问题,企业号可以正常上传,企业微信就一直提示这个
赵4老师 2017-04-11
  • 打赏
  • 举报
回复
抓包对比
ok632767947 2017-04-11
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
抓包对比
没有发现抓包,上面的抓包,显示的就是这些信息。
ok632767947 2017-04-10
  • 打赏
  • 举报
回复



应该没有发送错误
oyljerry 2017-04-10
  • 打赏
  • 举报
回复
应该是你post的数据有问题,或者格式不符合API要求
ok632767947 2017-04-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/srests/article/details/50751599 参考的是该楼主写的。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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