使用libcurl创建新目录

时间:2013-12-17 22:36:10

标签: c++ ftp libcurl

我一直在修补libcurl,到目前为止还不错。我有一些让我感到困惑的事情。我需要为远程服务器创建一个目录,这里有问题

  1. 我在CURLOPT_URL中传递了什么?它是根URL还是完整的第i个目录?

  2. 我想在创建目录时产生涟漪效果,如果我有diectory / abc / def / ghi,那么如果它们不存在则应该创建它们。我尝试过CURLOPT_FTP_CREATE_MISSING_DIRS但不起作用。

  3. 尝试过MKD失败了,我无法确定原因。以下是相关代码和应用程​​序日志

  4. CODE

    CURL* handle = curl_easy_init();
    
    SetHandleOptions(handle); //set options
    
    CURLcode res;
    wxString uploadUrl =....;//full URL with path like ftp.xyz.com/public_html/dir1/
    wxString command1 = "MKD "+uploadUrl;
    wxString command2 = "CWD "+uploadUrl;
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, command1.c_str());
    headers = curl_slist_append(headers, command2.c_str());
    curl_easy_setopt(handle, CURLOPT_QUOTE, headers);
    const char* uploadUrlStr = uploadUrl.c_str();
    
    if(handle)
    {
        //do file upload here
        /* upload to this place */
        curl_easy_setopt(handle, CURLOPT_URL, uploadUrlStr);
        /* enable verbose for easier tracing */
        curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(handle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
        curl_easy_setopt(handle, CURLOPT_QUOTE, headers);
    
        res = curl_easy_perform(handle);
    
        if(res==CURLE_OK)
        {
            SendMessage(_("Successfully Created Directory: ")+uploadUrl, HERROR_TYPE_WARNING);
        }
        else
        {
            //send error message
            wxString str(curl_easy_strerror(res));
            SendMessage(str);
        }
        /* always cleanup */
        curl_easy_cleanup(handle);
    
    }
    else
    {
        SendMessage(_("Could Not Connect to Server: Invalid Handle"), HERROR_TYPE_CRITICAL);
    }
    
    curl_slist_free_all(headers);
    

    LOG

    ----------Wed Dec 18 01:33:15 2013---------- 
    Changing Directory to / [01:33:20]
    Successfully logged In [01:33:21]
    No error [01:33:24]
    Starting Files List Fetching... [01:33:24]
    No error [01:33:26]
     [01:33:32]
    IDN support not present, can't parse Unicode domains
     [01:33:32]
    About to connect() to ftp.hosanna.site40.net port 21 (#2)
     [01:33:33]
      Trying 31.170.162.203...
     [01:33:33]
    Adding handle: conn: 0x7fffd0013110
     [01:33:33]
    Adding handle: send: 0
     [01:33:33]
    Adding handle: recv: 0
     [01:33:33]
    Curl_addHandleToPipeline: length: 1
     [01:33:33]
    - Conn 2 (0x7fffd0013110) send_pipe: 1, recv_pipe: 0
     [01:33:33]
     [01:33:33]
     [01:33:33]
    Closing connection 3
     [01:33:33]
    Couldn't resolve host name [01:33:33]
    Connected to ftp.hosanna.site40.net (31.170.162.203) port 21 (#2)
     [01:33:34]
    220---------- Welcome to Pure-FTPd [privsep] ----------
    220-You are user number 9 of 500 allowed.
    220-Local time is now 17:33. Server port: 21.
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    220-You are user number 9 of 500 allowed.
    220-Local time is now 17:33. Server port: 21.
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    220-Local time is now 17:33. Server port: 21.
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    USER xxxxxx
     [01:33:35]
    331 User xxxxxx OK. Password required
    tes of inactivity.
    -You are user number 9 of 500 allowed.
    220-Local time is now 17:33. Server port: 21.
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:35]
    PASS xxxxxx
     [01:33:35]
    230-OK. Current restricted directory is /
    230-124 files used (1%) - authorized: 10000 files
    230 3051 Kbytes used (0%) - authorized: 1536000 Kb
    
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:36]
    230-124 files used (1%) - authorized: 10000 files
    230 3051 Kbytes used (0%) - authorized: 1536000 Kb
    
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:36]
    230 3051 Kbytes used (0%) - authorized: 1536000 Kb
    
    220-This is a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:36]
    PWD
     [01:33:36]
    257 "/" is your current location
    ized: 1536000 Kb
    files used (1%) - authorized: 10000 files
    230 3051 Kbytes used (0%) - authorized: 1536000 Kb
     [01:33:37]
    Entry path is '/'
     [01:33:37]
    MKD ftp://ftp.hosanna.site40.net/public_html/Zulu names and meanings
     [01:33:37]
    ftp_perform ends with SECONDARY: 0
     [01:33:37]
    550-Can't create directory: No such file or directory
    550-124 files used (1%) - authorized: 10000 files
    550 3051 Kbytes used (0%) - authorized: 1536000 Kb
     a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:37]
    550-124 files used (1%) - authorized: 10000 files
    550 3051 Kbytes used (0%) - authorized: 1536000 Kb
     a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:37]
    550 3051 Kbytes used (0%) - authorized: 1536000 Kb
     a private system - No anonymous login
    220 You will be disconnected after 3 minutes of inactivity.
     [01:33:37]
    QUOT command failed with 550
     [01:33:37]
    Closing connection 2
     [01:33:37]
    Quote command returned error [01:33:37]
    

1 个答案:

答案 0 :(得分:1)

确保路径的格式为/ public_html / somedir而不是ftp://ftp.somesite.com/public_html/somedir

这就是我的代码出了问题。所以我通过删除URL解决了。我相信应该有一个关于libcurl的部分解释预期的URL格式。一旦我完全掌握它,我就会做出贡献!