13,825
社区成员
发帖
与我相关
我的任务
分享
bool SinaSDK::Upload(QString &imagepath, QString &msg)
{
//Check File Existed
if(!Tool::check_file_existed(q2s(imagepath).c_str()))
{
qDebug()<< "File Not Existed.";
return false;
}
//Check File Size
char* fdata;
long fSize = Tool::readfile(&fdata , q2s(imagepath).c_str() );
qDebug()<<fSize;
if( Tool::get_file_size(q2s(imagepath).c_str()) >= 1048576*5||fSize<1)
{
qDebug()<< "File Size is Big.";
return false;
}
struct curl_httppost *postt=NULL;
struct curl_httppost *last=NULL;
CURLcode code;
CURL *curl;
curl_global_init(CURL_GLOBAL_ALL);
curl=curl_easy_init();
QString req_url =s2q("http://api.t.sina.com.cn/statuses/upload.json");
QString post =s2q("POST");
QString oauth_nonce =s2q(oauth_gen_nonce());
QString oauth_timestamp = QString::number((long int) time(NULL));
QString oauth_version ="1.0";
QString basestr = post+s2q("&")+oauth_url_escape(q2s(req_url).c_str())+s2q("&")+s2q("oauth_consumer_key%3D")+m_appkey
+s2q("%26oauth_nonce%3D")+oauth_nonce
+s2q("%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D")+oauth_timestamp
+s2q("%26oauth_token%3D")+GetAccess_token()
+s2q("%26oauth_version%3D1.0")
+s2q("%26source%3D")+m_appkey
+s2q("%26status%3D")+msg;
char* out =oauth_sign_hmac_sha1(q2s(basestr).c_str(),q2s(m_secretkey+s2q("&")+GetAccess_token_secret()).c_str());
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_consumer_key", CURLFORM_COPYCONTENTS, q2s(m_appkey).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_nonce", CURLFORM_COPYCONTENTS, q2s(oauth_nonce).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_signature_method", CURLFORM_COPYCONTENTS, "HMAC-SHA1", CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_timestamp", CURLFORM_COPYCONTENTS, q2s(oauth_timestamp).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_token", CURLFORM_COPYCONTENTS, q2s(GetAccess_token()).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_version", CURLFORM_COPYCONTENTS, "1.0", CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "source", CURLFORM_COPYCONTENTS, q2s(m_appkey).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "status", CURLFORM_COPYCONTENTS, q2s(msg).c_str(), CURLFORM_END);
curl_formadd(&postt, &last, CURLFORM_COPYNAME, "oauth_signature", CURLFORM_COPYCONTENTS, out, CURLFORM_END);
if( curl_formadd(&postt, &last, CURLFORM_COPYNAME, "pic",CURLFORM_FILE, q2s(imagepath).c_str(), CURLFORM_END) != 0)
{
curl_formfree(postt);
return false;
}
if(curl == NULL)
{
curl_formfree(postt);
return false;
}
curl_easy_setopt(curl, CURLOPT_URL, q2s(req_url).c_str());
curl_easy_setopt(curl, CURLOPT_HTTPPOST, postt);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Weibo SDK/1.0");
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 50);
head.clear();
curl_easy_setopt( curl, CURLOPT_HEADERFUNCTION, header_callback);
buffer.clear();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer); //
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
code = curl_easy_perform(curl);
if (code != CURLE_OK)
{
return false;
}
string headtok = " " ;
vector<string> hv = Tool::tokenize(q2s(head), headtok ,true);
if(!(hv.size()>2&&hv[1]=="200"))
{
return false;
}
curl_easy_cleanup(curl);
return true;
}