HotpimUploadDlg.cpp
上传用户:chi1060
上传日期:2014-09-13
资源大小:115k
文件大小:10k
- // HotpimUploadDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "HotpimUpload.h"
- #include "HotpimUploadDlg.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CHotpimUploadDlg dialog
- CHotpimUploadDlg::CHotpimUploadDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CHotpimUploadDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CHotpimUploadDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CHotpimUploadDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CHotpimUploadDlg)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CHotpimUploadDlg, CDialog)
- //{{AFX_MSG_MAP(CHotpimUploadDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CHotpimUploadDlg message handlers
- BOOL CHotpimUploadDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Add "About..." menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
- // TODO: Add extra initialization here
-
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CHotpimUploadDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CHotpimUploadDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CHotpimUploadDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void CHotpimUploadDlg::OnButton1()
- {
- // TODO: Add your control notification handler code here
-
- SendTrack();//发送数据
- }
- CString CHotpimUploadDlg::MakeRequestHeaders(CString &strBoundary)//包头
- {
- CString strFormat;
- CString strData;
-
- strFormat = _T("Content-Type: multipart/form-data; boundary=%srn");//二进制文件传送Content-Type类型为: multipart/form-data
-
- strData.Format(strFormat, strBoundary);
- return strData;
- }
- CString CHotpimUploadDlg::MakePreFileData(CString &strBoundary, CString &strFileName, int iRecordID)
- {
- /**/////////////////////////////////////////////////////////////////////////////////
- //Content-Type:
- //JPG image/pjpeg
- //PNG image/x-png
- //BMP image/bmp
- //TIF image/tiff
- //GIF image/gif
- CString strFormat;
- CString strData;
-
- strFormat += _T("--%s");
- strFormat += _T("rn");
- strFormat += _T("Content-Disposition: form-data; name="para1"");//传给网络上的参数,根据网站抓包查看到底是需要哪些
- strFormat += _T("rnrn");
- strFormat += _T("my name is xiaoxiong");
- strFormat += _T("rn");
-
- strFormat += _T("--%s");
- strFormat += _T("rn");
- strFormat += _T("Content-Disposition: form-data; name="para2"");
- strFormat += _T("rnrn");
- strFormat += _T("国软软件研究所");
- strFormat += _T("rn");
- strFormat += _T("--%s");
- strFormat += _T("rn");
- strFormat += _T("Content-Disposition: form-data; name="trackdata"; filename="%s"");//文件地址信息
- strFormat += _T("rn");
- strFormat += _T("Content-Type: image/pjpeg");
- strFormat += _T("rnrn");
- strData.Format(strFormat, strBoundary, strBoundary, strBoundary, strFileName);//
- return strData;
- }
- CString CHotpimUploadDlg::MakePostFileData(CString &strBoundary)//发送请求包
- {
- CString strFormat;
- CString strData;
- strFormat = _T("rn");
- strFormat += _T("--%s");
- strFormat += _T("rn");
- strFormat += _T("Content-Disposition: form-data; name="submitted"");
- strFormat += _T("rnrn");
- strFormat += _T("hello");
- strFormat += _T("rn");
- strFormat += _T("--%s--");
- strFormat += _T("rn");
-
- strData.Format(strFormat, strBoundary, strBoundary);
- return strData;
- }
- BOOL CHotpimUploadDlg::SendTrack()//发送数据
- {
- CString _mFilePath;
- _mFilePath = "C:\GuoRuan\pagefile.jpg";//要传的本地文件地址
- int startp = _mFilePath.ReverseFind('\');
- int namelen = _mFilePath.GetLength()-startp-1;
-
- CString pcmname = _mFilePath;//.Mid(startp+1,namelen);
-
- //由于是公司那边的服务器,我不能把地址按公司的给你们,你们自已找个图片上传PC端软件,然后抓包,进行发送
- //www.GuoRuan.com这个网址是一个可以用PC端软件进行网站的文件传输,可以用抓包工具抓包查看它那边网站所要的信息对程序相应的修改
- //本程序已在我所在的公司测试OK
- CString defServerName ="www.GuoRuan.com";//服务器名
- CString defObjectName ="/system/UploadScreen/upfile_article.asp";//保存的地址
-
-
- // USES_CONVERSION;
- CInternetSession Session;
- CHttpConnection *pHttpConnection = NULL;
- INTERNET_PORT nPort = 80;
- CFile fTrack;
- CHttpFile* pHTTP;
- CString strHTTPBoundary;
- CString strPreFileData;
- CString strPostFileData;
- DWORD dwTotalRequestLength;
- DWORD dwChunkLength;
- DWORD dwReadLength;
- DWORD dwResponseLength;
- TCHAR szError[MAX_PATH];
- void* pBuffer;
- LPSTR szResponse;
- CString strResponse;
- BOOL bSuccess = TRUE;
-
- CString strDebugMessage;
-
- if (FALSE == fTrack.Open(_mFilePath, CFile::modeRead | CFile::shareDenyWrite))//读出文件
- {
- AfxMessageBox(_T("Unable to open the file."));
- return FALSE;
- }
-
- int iRecordID = 1;
- strHTTPBoundary = _T("---------------------------7b4a6d158c9");//定义边界值
- strPreFileData = MakePreFileData(strHTTPBoundary, pcmname, iRecordID);
- strPostFileData = MakePostFileData(strHTTPBoundary);
-
- dwTotalRequestLength = strPreFileData.GetLength() + strPostFileData.GetLength() + fTrack.GetLength();//计算整个包的总长度
-
- dwChunkLength = 64 * 1024;
-
- pBuffer = malloc(dwChunkLength);
-
- if (NULL == pBuffer)
- {
- return FALSE;
- }
-
- try
- {
- pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
- pHTTP = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
- pHTTP->AddRequestHeaders(MakeRequestHeaders(strHTTPBoundary));//发送包头请求
- pHTTP->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE);
-
- #ifdef _UNICODE
- pHTTP->Write(W2A(strPreFileData), strPreFileData.GetLength());
- #else
- pHTTP->Write((LPSTR)(LPCSTR)strPreFileData, strPreFileData.GetLength());//写入服务器所需信息
- #endif
-
- dwReadLength = -1;
- while (0 != dwReadLength)
- {
- strDebugMessage.Format(_T("%u / %un"), fTrack.GetPosition(), fTrack.GetLength());
- TRACE(strDebugMessage);
- dwReadLength = fTrack.Read(pBuffer, dwChunkLength);//文件内容
- if (0 != dwReadLength)
- {
- pHTTP->Write(pBuffer, dwReadLength);//写入服务器本地文件,用二进制进行传送
- }
- }
-
- #ifdef _UNICODE
- pHTTP->Write(W2A(strPostFileData), strPostFileData.GetLength());
- #else
- pHTTP->Write((LPSTR)(LPCSTR)strPostFileData, strPostFileData.GetLength());
- #endif
-
- pHTTP->EndRequest(HSR_SYNC);
-
- dwResponseLength = pHTTP->GetLength();
- while (0 != dwResponseLength)
- {
- szResponse = (LPSTR)malloc(dwResponseLength + 1);
- szResponse[dwResponseLength] = ' ';
- pHTTP->Read(szResponse, dwResponseLength);
- strResponse += szResponse;
- free(szResponse);
- dwResponseLength = pHTTP->GetLength();
- }
-
-
- }
- catch (CException* e)
- {
- e->GetErrorMessage(szError, MAX_PATH);
- e->Delete();
- AfxMessageBox(szError);
- bSuccess = FALSE;
- }
-
- pHTTP->Close();
- delete pHTTP;
-
- fTrack.Close();
-
- if (NULL != pBuffer)
- {
- free(pBuffer);
- }
- return bSuccess;
- }