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"); } }
相关文章推荐
- Linux socket 初步
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区
- Linux VS Unix:Linux欲一统天下 Unix不死
- linux下设定环境变量
- Linux下修改MySQL编码的方法