MFC/HTTP上传文件

BOOL UploadFile(LPCTSTR strURL, LPCTSTR strLocalFileName)
{
	if (strURL == NULL ||
		strURL == _T("") ||
		strLocalFileName == NULL ||
		strLocalFileName == _T(""))
	{
		return FALSE;
	}

	DWORD dwReadLength;
	DWORD dwResponseLength;
	DWORD dwTotalRequestLength;
	const DWORD dwChunkLength = 1024;

	char pBuffer[dwChunkLength];
	memset(pBuffer, 0, dwChunkLength);

	CHttpFile *pHttpFile = NULL;
	CHttpConnection* connection = NULL;
	CInternetSession session(_T("UploadFile"));

	DWORD dwType;
	INTERNET_PORT nPort;
	CString strServer, strObject;
	if (!AfxParseURL(strURL, dwType, strServer, strObject, nPort))
	{
#ifdef DEBUG
		OutputDebugString(_T("URL参数错误!"));
#endif // DEBUG
		return FALSE;
	}

	try
	{
		connection = session.GetHttpConnection(strServer, nPort);
		if (connection == NULL)
		{
#ifdef DEBUG
			OutputDebugString(_T("获取连接出错!"));
#endif // DEBUG
			session.Close();
			return FALSE;
		}
		pHttpFile = connection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);
		if (pHttpFile == NULL)
		{
#ifdef DEBUG
			OutputDebugString(_T("获取请求失败!"));
#endif // DEBUG
			connection->Close();
			connection = NULL;
			session.Close();
			return FALSE;
		}

		CTime ct;
		CString strTime, strBoundary;
		ct = CTime::GetCurrentTime();
		strTime = ct.Format(_T("%Y%m%d%H%M%S"));
		strBoundary = _T("*-*-*") + strTime + _T("*-*-*");

		CString strPreFileHeaders;
		strPreFileHeaders.Format(_T("Content-Type: multipart/form-data; boundary=%s\r\n"), strBoundary);
		pHttpFile->AddRequestHeaders(strPreFileHeaders);

		CString strPostData;
		strPostData.Format(_T("--%s\r\nContent-Disposition: form-data; name =\"voice\"; filename=\"%s.wav\"\r\nContent-Type: audio/x-wav\r\n\r\n"), strBoundary, strTime);
		CString endPostData;
		endPostData.Format(_T("\r\n--%s--\r\n"), strBoundary);

		CFile file;
		if (!file.Open(strLocalFileName, CFile::shareDenyNone | CFile::modeRead))
		{
#ifdef DEBUG
			OutputDebugString(_T("打开文件失败!"));
#endif // DEBUG
			pHttpFile->Close();
			pHttpFile = NULL;
			connection->Close();
			connection = NULL;
			session.Close();
			return FALSE;
		}

		DWORD sendLength = strPostData.GetLength()+endPostData.GetLength()+file.GetLength();
		if (!pHttpFile->SendRequestEx(sendLength, HSR_SYNC | HSR_INITIATE))
		{
#ifdef DEBUG
			OutputDebugString(_T("发送请求失败!"));
#endif // DEBUG
			pHttpFile->Close();
			pHttpFile = NULL;
			connection->Close();
			connection = NULL;
			session.Close();
			return FALSE;
		}

		pHttpFile->Write((LPSTR)(LPCTSTR)strPostData, strPostData.GetLength());
		dwReadLength = -1;
		while (0 != dwReadLength)
		{
			dwReadLength = file.Read(pBuffer, dwChunkLength);
			if (dwReadLength > 0)
			{
				pHttpFile->Write(pBuffer, dwReadLength);
			}
		}
		file.Close();

		pHttpFile->Write((LPSTR)(LPCTSTR)endPostData, endPostData.GetLength());
		pHttpFile->EndRequest();

		LPSTR szResponse;
		CString strResponse;
		dwResponseLength = pHttpFile->GetLength();
		while (0 != dwResponseLength)
		{
			szResponse = (LPSTR)malloc(dwResponseLength + 1);
			szResponse[dwResponseLength] = ‘\0‘;
			pHttpFile->Read(szResponse, dwResponseLength);
			strResponse += szResponse;
			free(szResponse);
			dwResponseLength = pHttpFile->GetLength();
		}
#ifdef DEBUG
		OutputDebugString(strResponse);
#endif // DEBUG

		AfxMessageBox(strResponse);

		if (pHttpFile != NULL)
		{
			pHttpFile->Close();
			pHttpFile = NULL;
		}
		if (connection != NULL)
		{
			connection->Close();
			connection = NULL;
		}
		session.Close();
		return TRUE;
	}
	catch (CInternetException * pEx)
	{
		char sz[256];
		pEx->GetErrorMessage(sz, 25);
		CString str;
		str.Format("InternetException occur!\r\n%s", sz);
		AfxMessageBox(str);
	}
	catch (...)
	{

	}

	if (pHttpFile != NULL)
	{
		pHttpFile->Close();
		pHttpFile = NULL;
	}
	if (connection != NULL)
	{
		connection->Close();
		connection = NULL;
	}
	session.Close();
	return FALSE;
}

  

时间: 2024-08-07 08:38:00

MFC/HTTP上传文件的相关文章

万家报账平台没有“上传文件”按钮的解决办法

在有的电脑没有"上传文件"的按钮? 第一步:首先检查浏览器设置. 第二步:找到IE的Internet选项菜单,开启菜单栏的根据下列方面找,如下图: 第三步:找到Internet选项后,点击,选择安全选项卡,并点击"自定义级别" 第四步:找到"将文件上载到服务器时包含本地目录路径"选择"启用".然后点击确定关闭IE,重启打开. 第五步:更新浏览器的flash版本.在百度中搜索"flash player官网"即

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

数据采集之Web端上传文件到Hadoop HDFS

前言 最近在公司接到一个任务,是关于数据采集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志采集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好最近都有在这方面做知识储备.正所谓养兵千日,用兵一时啊.学习到的东西只有应用到真实的环境中才有意义不是么. 环境 这里只做模拟环境,而不是真实的线上环境,所以也很简单,如果要使用的话还需要优化优化. OS Debian 8.7 Hadoop 2.6.5 SpringBoot 1.5.1.RELEASE 说明一下,这

ssh连接服务器以及scp上传文件方法

本地控制台输入 ssh [email protected]外网ip或内网ip,举例:ssh [email protected]      这是用用户名为root的用户登录192.168.133.196这个地址所在的后台.如果提示以下红色部分错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@

php+curl上传文件

因为公司项目用java做的,需要我这边用php上传文件.只给了个接口,参数都不明确,然后这边不提交表单,在生成pdf之后就立马上传.用了php+curl,总是没上传成功,这里看到了篇文章http://blog.sina.com.cn/s/blog_709475a101013dlf.html,希望可以借鉴.还有这篇http://www.cnblogs.com/jackluo/p/4113255.html

shell案例 - 统计用户上传文件的时间

问题与需求: 一个web服务跑论坛,每天都有很多用户会上传文件到服务器里,假设这些文件会保存在/data/www/attachment目录下,我想知道用户大概会在什么时候上传文件? 从而了解用户的行为习惯 解决思路: 1. 判断新文件是否被上传到了服务器里?以5分钟为一个间隔,进行检测. 2. 确定这些文件是什么时候被上传的? 3. 将新文件的列表输出到一个按年.月.日.时.分为名字的日志里,以方便我们进行查看分析 4. 写一个shell脚本来帮我们自动实现这个检测和记录的过程,当然只检测一次是

如何解决上传文件时文件内容相同

现在有这样一个需求:要求在上传文件时,凡是上传的文件,只要内容相同就只在服务器保存一份. 如何比较文件内容?如果当时思维受限,很难想到来比较文件内容的办法. 解决办法: 文件上传,肯定少不了用流来读文件,文件内容相同的根源就是:流读出来的字节码相同.这就想到了解决的办法,可是问题又来了.怎么比较字节码?想想那么长的字节码,如果用字符串的equals方法来比较,这不是一个好的解决办法.经过一番思考,我决定把流读出来的字节码进行MD5加密,用加密后的字符串来当作文件的文件名,然后在进行文件的上传(文

js 上传文件后缀名的判断 var flag=false;应用

js 上传文件后缀名的判断  var flag=false;应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> &

(转载)burpsuit 突破上传文件限制

1.运行Burp site,点击Proxy标签,确认Options选项卡下,Proxy listeners的running运行正常(勾选状态为运行),如果端口打开失败,可能的原因是有程序占用了该端口,点击edit,在local listener port:输入框输入一个未占用的端口,点击update即可.我这里将端口改为了8082 2.打开http://192.168.8.120/test/upload_flash.asp?formname=myform&editname=bookpic&