您的位置:首页 > 运维架构 > Linux

linux下c语言使用libcurl和实现文件上传

2015-08-27 16:13 666 查看
#include <stdio.h>
#include <sys/io.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <time.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <dirent.h>
#include <sys/inotify.h>

static char g_last_name[20]="upload_audio.mp3";

int sendPostFile();
unsigned long get_file_size();

unsigned long get_file_size()
{
unsigned long filesize = -1;
struct stat statbuff;
if(stat("/home/user/upload_audio.mp3", &statbuff) < 0){
return filesize;
}else{
filesize = statbuff.st_size;
}
return filesize;
}

int sendPostFile(){
CURL *curl;
CURLcode res;
char filesize[15]={0};
sprintf(filesize, "%lu", get_file_size);

struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headerlist=NULL;
static const char buf[] = "Expect:";

curl_global_init(CURL_GLOBAL_ALL);

/* Fill in the file upload field */

curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "uploadfile",
CURLFORM_FILE, g_name,
CURLFORM_CONTENTTYPE, "application/octet-stream",
CURLFORM_END);

printf("curl_formadd filesize\n");
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "filesize",
CURLFORM_COPYCONTENTS, filesize,
CURLFORM_END);

printf("curl_formadd submit\n");
curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME, "upfile",
CURLFORM_COPYCONTENTS, "commit",
CURLFORM_END);

UPLOG("curl curl_easy_init\n");
curl = curl_easy_init();
/* initalize custom header list (stating that Expect: 100-continue is not
wanted */
headerlist = curl_slist_append(headerlist, buf);
if(curl) {
UPLOG("curl true begin post\n");
/* what URL that receives this POST */
curl_easy_setopt(curl, CURLOPT_URL, POST_FILE_URL);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
//curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, 1613);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK){
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
UPLOG("curl url_easy_perform() failed:%s \n",curl_easy_strerror(res));
return -1;
}
/* always cleanup */
curl_easy_cleanup(curl);
/* then cleanup the formpost chain */
curl_formfree(formpost);
/* free slist */
curl_slist_free_all (headerlist);
}
return 0;
}

void main(int argc, char *argv[]){
if(0==sendPostFile()){
printf("sendPostFile success\n");
}else{
printf("sendPostFile failed\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息