|  | @@ -47,18 +47,19 @@ static thread_local uint64_t uSpeed;    /* 保存最后的上传速度 */
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  static size_t writeStringCallback(void *contents, size_t size, size_t nmemb, std::string *userStr) 
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    size_t newLength = size * nmemb;
 | 
	
		
			
				|  |  | -    size_t oldLength = userStr->size();
 | 
	
		
			
				|  |  | -    try
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        userStr->resize(oldLength + newLength);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    catch(std::bad_alloc &e)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        //handle memory problem
 | 
	
		
			
				|  |  | -        return 0;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    std::copy_n((char*)contents, newLength, userStr->begin() + oldLength);
 | 
	
		
			
				|  |  | +    // size_t newLength = size * nmemb;
 | 
	
		
			
				|  |  | +    // size_t oldLength = userStr->size();
 | 
	
		
			
				|  |  | +    // try
 | 
	
		
			
				|  |  | +    // {
 | 
	
		
			
				|  |  | +    //     userStr->resize(oldLength + newLength);
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  | +    // catch(std::bad_alloc &e)
 | 
	
		
			
				|  |  | +    // {
 | 
	
		
			
				|  |  | +    //     //handle memory problem
 | 
	
		
			
				|  |  | +    //     return 0;
 | 
	
		
			
				|  |  | +    // }
 | 
	
		
			
				|  |  | +    // std::copy_n((char*)contents, newLength, userStr->begin() + oldLength);
 | 
	
		
			
				|  |  | +    userStr->append((char*)contents, size * nmemb);
 | 
	
		
			
				|  |  |      return size * nmemb;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -573,6 +574,7 @@ bool CurlFtp::isDirExist(const std::string& dir)
 | 
	
		
			
				|  |  |      curl_easy_setopt(m_curl, CURLOPT_PASSWORD, m_password.c_str());
 | 
	
		
			
				|  |  |      /* 获取文件夹是否存在,不需要接收文件 */
 | 
	
		
			
				|  |  |      curl_easy_setopt(m_curl, CURLOPT_NOBODY, 1L);
 | 
	
		
			
				|  |  | +    curl_easy_setopt(m_curl, CURLOPT_HEADER, 1L);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /* 设置SFTP */
 | 
	
		
			
				|  |  |      setSftp(m_curl);
 | 
	
	
		
			
				|  | @@ -587,16 +589,27 @@ bool CurlFtp::isDirExist(const std::string& dir)
 | 
	
		
			
				|  |  |      /* 这里只需要执行一次 */
 | 
	
		
			
				|  |  |      CURLcode res = curl_easy_perform(m_curl);
 | 
	
		
			
				|  |  |      bool result = true;
 | 
	
		
			
				|  |  | -    if(res != CURLE_OK)
 | 
	
		
			
				|  |  | +    if(res == CURLE_REMOTE_FILE_NOT_FOUND)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        // SPDLOG_ERROR("Failed to get file list, error code: {} ,{}", (int)res, curl_easy_strerror(res));
 | 
	
		
			
				|  |  |          result = false;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    // bool ret = performCurl(m_curl);
 | 
	
		
			
				|  |  | -    // if(!ret)
 | 
	
		
			
				|  |  | -    // {
 | 
	
		
			
				|  |  | -    //     // SPDLOG_ERROR("Failed to create FTP Dir");
 | 
	
		
			
				|  |  | -    // }
 | 
	
		
			
				|  |  | +    else if(res != CURLE_OK)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        // SPDLOG_ERROR("Check remote dir error, error code: {} ,{}", (int)res, curl_easy_strerror(res));
 | 
	
		
			
				|  |  | +        result = false;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else 
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        /* sftp即使远程文件夹不存在也会返回OK,这里使用http进行检查 */
 | 
	
		
			
				|  |  | +        // long response_code = -1;
 | 
	
		
			
				|  |  | +        // res = curl_easy_getinfo(m_curl, CURLINFO_HTTP_CONNECTCODE, &response_code);
 | 
	
		
			
				|  |  | +        // if((res == CURLE_OK) && (response_code == 0))
 | 
	
		
			
				|  |  | +        // {
 | 
	
		
			
				|  |  | +        //     SPDLOG_ERROR("Remote directory not found: {}", dir);
 | 
	
		
			
				|  |  | +        //     result = false;
 | 
	
		
			
				|  |  | +        // }
 | 
	
		
			
				|  |  | +        // SPDLOG_DEBUG("response_code: {}", response_code);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return result;
 | 
	
		
			
				|  |  |  }
 |