⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postdata.cpp

📁 上传文件到服务器-similar windows drawing the image coding, code-and following through vc 6.0
💻 CPP
字号:
// POSTDATA.CPP - Implementation file for your Internet Server
//    PostData Extension

#include "stdafx.h"
#include "PostData.h"

///////////////////////////////////////////////////////////////////////
// The one and only CWinApp object
// NOTE: You may remove this object if you alter your project to no
// longer use MFC in a DLL.

CWinApp theApp;

///////////////////////////////////////////////////////////////////////
// command-parsing map

BEGIN_PARSE_MAP(CPostDataExtension, CHttpServer)
	// TODO: insert your ON_PARSE_COMMAND() and 
	// ON_PARSE_COMMAND_PARAMS() here to hook up your commands.
	// For example:

	DEFAULT_PARSE_COMMAND(Default, CPostDataExtension)
	ON_PARSE_COMMAND(Default, CPostDataExtension, ITS_EMPTY)
	


	DEFAULT_PARSE_COMMAND(FormRequest,	CPostDataExtension)
	ON_PARSE_COMMAND(FormRequest,		CPostDataExtension, ITS_RAW)

END_PARSE_MAP(CPostDataExtension)


///////////////////////////////////////////////////////////////////////
// The one and only CPostDataExtension object

CPostDataExtension theExtension;


///////////////////////////////////////////////////////////////////////
// CPostDataExtension implementation

CPostDataExtension::CPostDataExtension()
{
}

CPostDataExtension::~CPostDataExtension()
{
}

BOOL CPostDataExtension::GetExtensionVersion(HSE_VERSION_INFO* pVer)
{
	// Call default implementation for initialization
	CHttpServer::GetExtensionVersion(pVer);

	// Load description string
	TCHAR sz[HSE_MAX_EXT_DLL_NAME_LEN+1];
	ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
			IDS_SERVER, sz, HSE_MAX_EXT_DLL_NAME_LEN));
	_tcscpy(pVer->lpszExtensionDesc, sz);
	return TRUE;
}

BOOL CPostDataExtension::TerminateExtension(DWORD dwFlags)
{
	// extension is being terminated
	//TODO: Clean up any per-instance resources
	return TRUE;
}

///////////////////////////////////////////////////////////////////////
// CPostDataExtension command handlers

void CPostDataExtension::Default(CHttpServerContext* pCtxt)
{
	//StartContent(pCtxt);
	//WriteTitle(pCtxt);

	
	CString		str;

	if ( !LoadLongResource(str, IDR_HTML_FORM) )
	{
		//do some log error
		*pCtxt	<< "<h2>LoadLongResource error.</h2><p>"	<< str;
		return;
	}

	*pCtxt	<< str;

	//EndContent(pCtxt);
}

void CPostDataExtension::WriteServerData(CHttpServerContext* pCtxt)
{
	//_______________________________________________________
	*pCtxt	<< "<p><hr><br>";
	*pCtxt	<< "<b>Server Context bulk data :</b><p>";

	*pCtxt << pCtxt->m_pECB->lpszPathInfo			<<"<br>";
	*pCtxt << pCtxt->m_pECB->lpszMethod				<<"<br>";
	*pCtxt << pCtxt->m_pECB->lpszQueryString		<<"<br>";
	*pCtxt << pCtxt->m_pECB->lpszPathTranslated		<<"<br>";
	*pCtxt << pCtxt->m_pECB->lpszContentType		<<"<br>";

	char rgStatus[4000];
    DWORD dwLen = 4000;
	pCtxt->GetServerVariable("ALL_HTTP",rgStatus,&dwLen);
	rgStatus[dwLen] = '\0';
	*pCtxt << rgStatus								<<"<br>";

	dwLen = 4000;
	pCtxt->GetServerVariable("PATH_INFO",rgStatus,&dwLen);
	rgStatus[dwLen] = '\0';
	*pCtxt << "PATH_INFO			: "<<rgStatus	<<"<br>";

	dwLen = 4000;
	pCtxt->GetServerVariable("PATH_TRANSLATED",rgStatus,&dwLen);
	rgStatus[dwLen] = '\0';
	*pCtxt << "PATH_TRANSLATED		: "<<rgStatus	<<"<br>";

	dwLen = 4000;
	pCtxt->GetServerVariable("SCRIPT_NAME",rgStatus,&dwLen);
	rgStatus[dwLen] = '\0';
	*pCtxt << "SCRIPT_NAME			: "<<rgStatus	<<"<br>";

	dwLen = 4000;
	pCtxt->GetServerVariable("SERVER_NAME",rgStatus,&dwLen);
	rgStatus[dwLen] = '\0';
	*pCtxt << "SERVER_NAME			: "<<rgStatus	<<"<br>";
	//_______________________________________________________

}

void CPostDataExtension::WriteServerVar(CHttpServerContext* pCtxt, TwinVector vecServerCtx)
{
	
	_bstr_t						bstrToken;
	int							index;
	MapBstrt2Bstrt				map;
	TwinVector::iterator		itVec;
	MapBstrt2Bstrt::iterator	itMap;

	
	//______________________________________________________________________________________
	//the result vector 
	*pCtxt	<< "<p><hr><br>";
	*pCtxt	<< "<b>Server Context Vector search :</b><p>";

	for (itVec = vecServerCtx.begin(); itVec != vecServerCtx.end(); itVec++)
	{
		*pCtxt	<<	itVec->GetName()	<<	" = "	<<	itVec->GetValue()	<<	"<br>";
	}

	//Finf a value
	_bstr_t	bstrValue			= vecServerCtx.Find(L"Filename");

	
	//______________________________________________________________________________________


	//______________________________________________________________________________________
	//the result map 
	*pCtxt	<< "<p><hr><br>";
	*pCtxt	<< "<b>Server Context Map search :</b><p>";

	bstrToken					= L"DATA";
	index						= vecServerCtx.Find(bstrToken);
	if (index > -1)
	{
		map						= vecServerCtx[index].GetValueAsMap();
		if(!map.empty())
		{
			for (itMap = map.begin(); itMap != map.end(); itMap++)
			{
				*pCtxt	<<	(*itMap).first	<<	" = "	<<	(*itMap).second	<<	"<br>";
			}


			//other way:
			*pCtxt	<< ""	<<	"_____________________"		<< "<p>";

			*pCtxt	<< "Filename = "	<< map[L"Filename"]		<< "<br>";
			*pCtxt	<< "Filedata = "	<< map[L"Filedata"]		<< "<br>";
			*pCtxt	<< "PathData = "	<< map[L"PathData"]		<< "<br>";
			*pCtxt	<< "password1 = "	<< map[L"password1"]	<< "<br>";

			
			//other way:
			*pCtxt	<< ""	<<	"_____________________"		<< "<p>";
			
			itMap				= map.find(L"select1");
			*pCtxt	<< "select1 = "		<< (*itMap).second		<< "<br>";			
		}
	}
	//______________________________________________________________________________________

}
void CPostDataExtension::FormRequest(CHttpServerContext* pCtxt, void* pVoid, DWORD dwBytes)
{
	//demo form request
	

	TwinVector								vecServerCtx(pCtxt, (LPTSTR)pVoid);
	

	WriteServerData(pCtxt);


	WriteServerVar(pCtxt, vecServerCtx);
	
}



// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CPostDataExtension, CHttpServer)
	//{{AFX_MSG_MAP(CPostDataExtension)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0



//////////////////////////////////////////////////////////////////////
// Helper functions
//////////////////////////////////////////////////////////////////////
BOOL CPostDataExtension::LoadLongResource(CString &str, UINT nID)
{
	HRSRC				hRes;
	BOOL				bResult			= FALSE;
	static const TCHAR	szHTMLType[]	= "CustomHTML";

	CHAR				szPath[MAX_PATH];



	//GetModuleFileName( GetModuleHandle(NULL) , szPath, sizeof(szPath) ); 
	//str					= szPath;

	strcpy(szPath, "PostData.dll");
	//HINSTANCE			hInst			= LoadLibrary(szPath);
	HINSTANCE			hInst			= AfxGetResourceHandle();
	
	//hRes = FindResource(hInst, MAKEINTRESOURCE(nID), szHTMLType);		//if you want you custom resource type
	hRes = FindResource(hInst, MAKEINTRESOURCE(nID), RT_HTML );			//if you want standard html type
	if (hRes == NULL)
	{	
		//trace error
		str		= "Error: Resource could not be found\r\n";
	}
	else
	{
		DWORD dwSize = SizeofResource(hInst, hRes);
		if (dwSize == 0)
		{
			str.Empty();
			bResult = TRUE;
		}
		else
		{	
			LPTSTR pszStorage = str.GetBufferSetLength(dwSize);

			HGLOBAL hGlob = LoadResource(hInst, hRes);
			if (hGlob != NULL)
			{
				LPVOID lpData = LockResource(hGlob);

				if (lpData != NULL)
				{
					memcpy(pszStorage, lpData, dwSize);
					//str			= (LPCTSTR)lpData;
					
					bResult		= TRUE;
				}

				FreeResource(hGlob);
			}
		}

		if (!bResult)
		str		= "Error: Resource could not be load\r\n";
	}

	return bResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -