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

#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"); 
	}
}

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值