• [转]vc++ post http实现文件上传


    bool   CTCSDlg::UpFileOfHttp(TCHAR* strSourceName,TCHAR* strDestName,TCHAR* _strFtpSite)
    {
     TCHAR* pName=new TCHAR[256]; 
     wsprintf(pName,L"%s?filename=%s",m_strFtpSite,strDestName);
     AfxOutInfoToFile("===上传文件名:",strSourceName);
     AfxOutInfoToFile("===上传地址:",pName);
     ASSERT(m_strFtpSite != "" && strSourceName != "");
     BOOL bResult = FALSE;
     DWORD dwType = 0;
     CString strServer;
     CString strObject;

     INTERNET_PORT wPort = 80;
     DWORD dwFileLength = 0;
     char * pFileBuff = NULL;
     CHttpConnection * pHC = NULL;
     CHttpFile * pHF = NULL;
     CInternetSession cis;

     bResult =  AfxParseURL(pName, dwType, strServer, strObject, wPort);

     AfxOutInfoToFile(L"===解析的服务器:",strServer.GetBuffer(strServer.GetLength()));
     AfxOutInfoToFile(L"===解析的地址:",strObject.GetBuffer(strObject.GetLength()));
     //AfxOutInfoToFile("===解析的地址:",m_strFtpSite);
     if(!bResult)
      return false;
     CFile file;
     try
     {
      if(!file.Open(strSourceName, CFile::shareDenyNone | CFile::modeRead))
       return false;
      dwFileLength = file.GetLength();
      if(dwFileLength <= 0)
       return false;

      pFileBuff = new char[dwFileLength];
      memset(pFileBuff, 0, sizeof(char) * dwFileLength);
      file.Read(pFileBuff, dwFileLength);
      const int nTimeOut = 5000;
      cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //联接超时设置

      cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);  //重试1次
      pHC = cis.GetHttpConnection(strServer, wPort);  //取得一个Http联接
      pHF = pHC->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);

      if(!pHF->SendRequest(NULL, 0, pFileBuff, dwFileLength))
      {
       delete[]pFileBuff;
       pFileBuff = NULL;
       pHF->Close();
       pHC->Close();
       cis.Close();
       AfxOutInfoToFile(L"上传中,SendRequest error\n");
       return FALSE;
      }

      CString szError=L"0";
      char szBuff[1024];
      UINT nRead;
      while (nRead = pHF->Read(szBuff,1023))
      {
       szError=CString(szBuff,nRead);
       AfxOutInfoToFile(L"返回值:",szError.GetBuffer(szError.GetLength()));
      }
      
      
      /*
       DWORD   dwError,   dwBufferLength;  
       TCHAR szError[256]={_T("0")};
      
      while(pHF->Read(szError,256))
      {
       lstrcpy(szError,L"error");
       AfxOutInfoToFile(L"返回的值 :",szError);
      }
      */
      //if(lstrcmp(_T("0"),szError)==0)
     // {
     //  return false;
     // }
      
      DWORD dwStateCode = 0;
      pHF->QueryInfoStatusCode(dwStateCode);
      if(dwStateCode == HTTP_STATUS_OK)
       bResult = TRUE;
      else
      {
       
       AfxOutInfoToFile(L"上传中,服务器返回的代码为");
       return false;
      }

     // AfxOutInfoToFile(L"上传中,服务器返回的代码为");
     // AfxOutInfoToFile(L"上传中,服务器返回的代码为");
     }

     catch(...)
     {
      char sz[256] = "";
     // pEx->GetErrorMessage(sz, 25);
      CString str;
     // str.Format("InternetException occur!\r\n%s", sz);
      //AfxMessageBox(str);
     // g_writelog.WriteLine("上传中,%s",str);

     }

     delete[]pFileBuff;
     pFileBuff = NULL;
     file.Close();
     pHF->Close();
     pHC->Close();
     cis.Close();

    }

  • 相关阅读:
    Styling a Flex Button control using embedded fonts(转载)
    ArcSDE Administration Command Reference (来自ARCGIS官方)
    FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟
    SDE数据的备份与恢复(转载)
    C#中将dll汇入exe,并加壳(转载)
    WEB页面导出为EXCEL/WORD文档的方法 (转载)
    Property Manager Updated 1.0.0.4 小工具介绍(转载)
    Openbravo 3.0安装过程简述
    Installing "uuidossp" library in Postgres 9.1
    BindingSource的事件触发顺序
  • 原文地址:https://www.cnblogs.com/niuniu502/p/2072203.html
Copyright © 2020-2023  润新知