zoukankan      html  css  js  c++  java
  • curl ftp libcurl 功能使用

    struct FtpFile {
      const char *filename;
      FILE *stream;
    };
    
    static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
    {
      struct FtpFile *out = (struct FtpFile *)stream;
      if(out && !out->stream) {
        /* open file for writing */
        out->stream = fopen(out->filename, "wb");
        if(!out->stream)
          return -1; /* failure, can't open file to write */
      }
      return fwrite(buffer, size, nmemb, out->stream);
    }
    
    void fileLoadFtp()
    {
      CURL *curl;
      CURLcode res;
    
      QString locale = ui->lineEdit_path->text();
      char *file = locale.toLatin1().data();
      QFileInfo fileInfo(locale);
      QString fileName = fileInfo.fileName();
      QString remote = "ftp://user:password@ftp.example.com/" + fileName;
      char *remote_url = remote.toLatin1().data(); //服务器路径
    
      struct FtpFile ftpfile = {
        file, /* name to store the file as if successful */
        NULL
      };
    
      curl_global_init(CURL_GLOBAL_DEFAULT);
    
      curl = curl_easy_init();
      if(curl) {
        /*
         * You better replace the URL with one that works!
         */
        curl_easy_setopt(curl, CURLOPT_URL, remote_url);
        /* Define our callback to get called when there's data to be written */
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
        /* Set a pointer to our struct to pass to the callback */
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
    
        curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);
    
        /* Switch on full protocol/debug output */
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    
        res = curl_easy_perform(curl);
    
        /* always cleanup */
        curl_easy_cleanup(curl);
    
        if(CURLE_OK != res) {
          /* we failed */
          fprintf(stderr, "curl told us %d
    ", res);
        }
      }
    
      if(ftpfile.stream)
        fclose(ftpfile.stream); /* close the local file */
    
      curl_global_cleanup();
    }
    
  • 相关阅读:
    浅谈 Web 缓存
    纯前端实现人脸识别-提取-合成
    正则表达式对金额的处理函数
    算法设计题怎么复习
    leetcode 446 等差数列划分 II
    git远程分支关系、命令
    深度优先遍历DFS--用简单的方式理解
    数据结构程序题
    常用排序算法的时间复杂度和空间复杂度
    英语句子
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709309.html
Copyright © 2011-2022 走看看