BOOL UploadFile(LPCTSTR strURL, LPCTSTR strLocalFileName)
{
// 如果URL为空或者文件不存在,直接返回
if (strURL == NULL ||
strURL == _T("") ||
strLocalFileName == NULL ||
strLocalFileName == _T("") ||
!PathFileExists(strLocalFileName) ||
PathIsDirectory(strLocalFileName))
{
return FALSE;
} 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)) return FALSE; BOOL bSuccess = FALSE;
DWORD dwReadLength;
DWORD dwResponseLength;
DWORD dwTotalRequestLength;
const DWORD dwChunkLength = 1024; char pBuffer[dwChunkLength];
memset(pBuffer, 0, dwChunkLength); try
{
connection = session.GetHttpConnection(strServer, nPort);
pHttpFile = connection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject); 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;
file.Open(strLocalFileName, CFile::shareDenyNone | CFile::modeRead); DWORD sendLength = strPostData.GetLength() + endPostData.GetLength() + file.GetLength();
pHttpFile->SendRequestEx(sendLength, HSR_SYNC | HSR_INITIATE); 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(); DWORD dwStauts;
if (!pHttpFile->QueryInfoStatusCode(dwStauts) ||
dwStauts < 200 || 299 < dwStauts)
{
bSuccess = FALSE;
}
else
{
CString response, text;
for (int i = 0; pHttpFile->ReadString(text); ++i)
{
response += text + "\r\n";
}
if (response.IsEmpty())
{
bSuccess = FALSE;
}
else
{
MPP::Json json = MPP::Json::Parse(response);
bSuccess = json.Contains("state") && !json["state"].IsNull() &&
json["state"].IsBool() && json["state"].AsBool();
}
}
}
catch (...)
{
bSuccess = FALSE;
} if (pHttpFile != NULL)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
}
if (connection != NULL)
{
connection->Close();
delete connection;
connection = NULL;
}
session.Close();
return bSuccess;
}

  

MFC之HTTP文件上传的更多相关文章

  1. Http服务器实现文件上传与下载(一)

    一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...

  2. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  3. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  4. Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...

  5. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  6. ,net core mvc 文件上传

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...

  7. Web开发安全之文件上传安全

    很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...

  8. AutoIt实现Webdriver自动化测试文件上传

    在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...

  9. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

随机推荐

  1. 【BZOJ2049】[SDOI2008] Cave 洞穴勘测(LCT维护连通性)

    点此看题面 大致题意: 有\(n\)个洞穴,\(3\)种操作:连一条边,删一条边,询问两点是否联通. \(LCT\)维护连通性 这道题应该是\(LCT\)动态维护连通性的一道模板题. 考虑将\(x\) ...

  2. 博弈论经典算法(一)——对抗搜索与Alpha-Beta剪枝

    前言 在一些复杂的博弈论题目中,每一轮操作都可能有许多决策,于是就会形成一棵庞大的博弈树. 而有一些博弈论题没有什么规律,针对这样的问题,我们就需要用一些十分玄学的算法. 例如对抗搜索. 对抗搜索简介 ...

  3. 后台调用前台js

    WEB后台代码调用前台JS(两种方式). 1   这种方式只能调用简单的JS代码.不能调用自定义的函数. string jss = "<script language='javascr ...

  4. java内存模型原理阅读总结

    Java内存模型可以理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象.不同架构的物理计算机可以有不一样的内存模型,java虚拟机也有自己的内存模型,java虚拟机规范中试图定义一种 ...

  5. java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载

    从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...

  6. 第26题:LeetCode572:Subtree of Another Tree另一个树的子树

    题目描述 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: ...

  7. 牛客小白月赛5 G 异或(xor) 【找规律】

    题目链接: https://www.nowcoder.com/acm/contest/135/g 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apojacs ...

  8. MySQL表碎片整理

    MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...

  9. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  10. [BZOJ2947]促销(Splay)

    Description Great Bytelandish的超级市场网络请你编写一个程序模拟促销商品的成本费用(simulating costs of the promotionbeing prepa ...