MFC之HTTP文件上传
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文件上传的更多相关文章
- Http服务器实现文件上传与下载(一)
一.引言 大家都知道web编程的协议就是http协议,称为超文本传输协议.在J2EE中我们可以很快的实现一个Web工程,但在C++中就不是非常的迅速,原因无非就是底层的socket网络编写需要自己完成 ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- Java FtpClient 实现文件上传服务
一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- ,net core mvc 文件上传
工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...
- Web开发安全之文件上传安全
很长一段时间像我这种菜鸡搞一个网站第一时间反应就是找上传,找上传.借此机会把文件上传的安全问题总结一下. 首先看一下DVWA给出的Impossible级别的完整代码: <?php if( iss ...
- AutoIt实现Webdriver自动化测试文件上传
在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
随机推荐
- css img 等比例自动缩放
按父容器宽度自动缩放,并且保持图片原本的长宽比 img{ width: auto; height: auto; max-width: 100%; max-height: 100%; }
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第七节
第七节:使用下一代CUDA硬件,快乐加速度 原文链接 Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个 ...
- C# StreamReader对象
1.读取文件 输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台.StreamRead ...
- 人品计算器 JFrame 窗体软件版 JPanel JTextField JTextArea JButtton JLabel setContentPane Swing包(用户界面工具包)
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.eve ...
- Python_循环判断表达式
一.if判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. if判断结构: if 条件: 动作 elif 条件: 动作 else: 动作 if判断年龄: age_of_princal ...
- rpc - 接口返回数据结构的设计
方案一: 系统级状态 .业务级别的状态同用 code要特殊声明保留状态,如若不声明保留状态,一旦业务开发人员用到了系统级的状态,就有必要侵入的改动业务返回的code(新code与业务欲返回的code ...
- Firebase Cloud Function 编写与部署
1.设置和初始化 Firebase SDK for Cloud Functions (1).Cloud Functions 运行的是 Node v6.14.0,因此需要安装nodejs: https: ...
- 经典dfs(depth-first search)
DFS主要在于参数的改变; 样例输入: n=4 //给定n个数字 a={1,2,4,7} //输入n个数据 k=15 //目标数字 样例输 ...
- Matlab数据转化至python端,并写入数据库
因工作原因,一些获取的行业数据以已知的结构体存储在.mat文件中, 现需要将其存储在数据库中并且能够灵活调用至python dataframe里进行操作 原数据的一个例子如下 目标如上: 然后是转化代 ...
- 牛客练习赛42 A 字符串
题目描述 给定两个等长的由小写字母构成的串 A,BA,B,其中 |A|=|B|=n|A|=|B|=n. 现在你需要求出一个子区间 [l,r][l,r] 使得 LCP(A[l,r],B[l,r])×LC ...