form方式でHttpサーバに画像のコード例を提出します。

1862 ワード

#include <string>
#include <curl/curl.h>

/*
Title: form   Http       
Environment: 
 [1]VS2010SP1
 [2]libcurl 7.36
    
 [1]《cURL / libcurl / API / Examples / postit2.c》
 http://curl.haxx.se/libcurl/c/postit2.html

<form method="post" action="http://172.16.1.155:82/upload/posShowImg" enctype="multipart/form-data">
<input type="file" name="photo" id="add_newsImgFile"/>
</form>
       action photo    。

      :
UploadImage("http://172.16.1.155:82/upload/posShowImg","d:\\       .jpg",
"http://172.16.1.155:82/upload/posShowImg",outData); 
*/
size_t write_callback( void *ptr, size_t size, size_t nmemb, void *outBuffer )  
{  
	int len = size * nmemb;  
	char *temp = new char[len+1];     
	memcpy(temp,ptr,len);  
	temp[len]=0;  
	reinterpret_cast<std::string *>(outBuffer)->append(temp);  
	delete temp;  
	return len;  
}  

int UploadImage(char* pPostURL, char* pImageFileName, char* pAction, std::string &strOutData) 
{
	CURL *curl;
	CURLcode res;

	curl = curl_easy_init();
	strOutData="";

	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);//write_data
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strOutData);

	struct curl_httppost *formpost = 0;
	struct curl_httppost *lastptr  = 0;
	curl_formadd(&formpost, &lastptr, CURLFORM_PTRNAME, "photo", CURLFORM_FILE, pImageFileName,CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
	curl_formadd(&formpost, &lastptr,CURLFORM_COPYNAME, "action",CURLFORM_COPYCONTENTS, pAction,CURLFORM_END);
	curl_easy_setopt(curl, CURLOPT_URL, pPostURL);
	curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

	res = curl_easy_perform(curl);
	curl_easy_cleanup(curl);
	curl_formfree(formpost);
	return res;
}