0
Win32, Wininet을 사용하여 Flickr.I 이미지를 업로드하는 VC++에서 응용 프로그램을 만들고 있습니다. Frob, Token을 올바르게 가져올 수 있지만 이미지를 업로드하려고 할 때 오류가납니다. 크기 너무 큰.C에서 깜박일 이미지 업로드
wstring wstrBoundry = L"--ABCD\r\n";
wstring wstrContent =wstrBoundry;
wstrContent +=L"Content-Disposition: form-data; name=\"api_key\"\r\n\r\n";
wstrContent +=wstrAPIKey.c_str() ;
wstrContent += L"\r\n";
wstrContent +=wstrBoundry;
wstrContent +=L"Content-Disposition: form-data; name=\"auth_token\"\r\n\r\n";
wstrContent +=m_wstrToken.c_str();
wstrContent += L"\r\n";
wstrContent +=wstrBoundry;
wstrContent +=L"Content-Disposition: form-data; name=\"api_sig\"\r\n\r\n";
wstrContent +=wstrSig;
wstrContent += L"\r\n";
wstrContent +=wstrBoundry;
wstrContent +=L"Content-Disposition: form-data; name=\"photo\"; filename=\"C:\\test.jpg\"";
wstrContent +=L"\r\n";
wstrContent +=L"Content-Type: image/jpeg\r\n\r\n";
wstring wstrFilePath(L"C:\\test.jpg");
CAtlFile file;
HRESULT hr = S_OK;
hr = file.Create(wstrFilePath.c_str(),GENERIC_READ,FILE_SHARE_READ,OPEN_EXISTING);
if(FAILED(hr))
{
return;
}
ULONGLONG nLen;
hr = file.GetSize(nLen);
if (nLen > (DWORD)-1)
{
return ;
}
char * fileBuf = new char[nLen];
file.Read(fileBuf,nLen);
wstring wstrLastLine(L"\r\n--ABCD--\r\n");
size_t szTotalSize = sizeof(wchar_t) * (wstrContent.length()) +sizeof(wchar_t) * (wstrLastLine.length()) + nLen;
unsigned char *buffer = (unsigned char *)malloc(szTotalSize);
memset(buffer,0,szTotalSize);
memcpy(buffer,wstrContent.c_str(),wstrContent.length() * sizeof(wchar_t));
memcpy(buffer+wstrContent.length() * sizeof(wchar_t),fileBuf,nLen);
memcpy(buffer+wstrContent.length() * sizeof(wchar_t)+nLen,wstrLastLine.c_str(),wstrLastLine.length() * sizeof(wchar_t));
hRequest = HttpOpenRequest(hSession, L"POST", L"/services/upload/", L"HTTP/1.1", NULL, NULL, 0, NULL);
if(hRequest)
{
bRet = HttpAddRequestHeaders(hRequest,wstrAddHeaders.c_str(),wstrAddHeaders.length(),HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
if(bRet)
{
bRet = HttpSendRequest(hRequest,NULL,0,(void *)buffer,szTotalSize);
if(bRet)
{
while(true)
{
char buffer[1024]={0};
DWORD read=0;
BOOL r = InternetReadFile(hRequest,buffer,1024,&read);
if(read !=0)
{
wstring strUploadXML =buffer;
break;
}
}
}
}
내가 곧 길이 요 내가 문자열에 이미지 데이터를 추가하고 게시하고 꽤 확실하지 않다 다음과 같이 POST 요청의
wstring wstrAddHeaders = L"Content-Type: multipart/form-data;boundary=ABCD\r\n";
wstrAddHeaders += L"Host: api.flickr.com\r\n";
wchar_t tempStr[MAX_PATH];
wsprintf(L"Content-Length: %ld\r\n",szTotalSize);
wstrAddHeaders += tmpStr;
wstrAddHeaders +=L"\r\n";
HINTERNET hSession = InternetConnect(hInternet, L"www.flickr.com", INTERNET_DEFAULT_HTTP_PORT, NULL,NULL, INTERNET_SERVICE_HTTP, 0, 0);
if(hSession==NULL)
{
dwErr = GetLastError();
return;
}
콘텐츠 생성 다음과 같이
헤더 생성 의뢰. 이미지 데이터를 유니 코드로 변환해야합니까? 다른 사람이 내가 잘못하고있는 것을 찾을 수 있다면 어떤 제안이라도 나에게 도움이 될 것입니다.