使用libcurl上传带有特殊字符的文件名

时间:2017-02-08 11:39:12

标签: c++ libcurl

尝试使用curl FTP将文件 HU98373 + TRRepr#o4_201702061135_34 从本地系统复制到远程目标。

在远程系统中,它创建了 HU98373 + TRRepr HU98373 + TRRepr#o4_201702061135_34 的文件。我不知道为什么不考虑#'#'字符

请检查以下代码。

remoteFileUrl = ftp://IPADRESS/HOME/HU98373+TRRepr#o4_201702061135_34.tmp/C20170206.1135-20170206.1140

curl_easy_setopt(m_CurlSessionHandle, CURLOPT_URL, remoteFileUrl);
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_UPLOAD, ON);

                        // Set the input local file handle
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_READDATA, localFileHandle);

                        // Set on/off all wanted options
                        // Enable ftp data connection
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_NOBODY, OFF);

                        // Create missing directory into FTP path
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_FTP_CREATE_MISSING_DIRS , ON) ;

                        // Set the progress function, in oder to check the stop transfer request
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_NOPROGRESS, OFF);
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_PROGRESSFUNCTION, progressCb);
                        curl_easy_setopt(m_CurlSessionHandle, CURLOPT_PROGRESSDATA, this);

                        CURLcode curlOperationResult = curl_easy_perform(m_CurlSessionHandle);

任何人都可以帮助我吗

1 个答案:

答案 0 :(得分:0)

网址由以下部分组成:

 scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

characeter #表示URL片段。您必须对#字符进行URL编码,以使其不被解释为片段分隔符。

一旦编码,服务器将按预期解析URL,并生成正确的文件名。

以下问题显示了如何在C ++中执行此操作:

Encode/Decode URLs in C++