MFC环境下使用WinINet库实现HTTP上传文件接口
在MFC环境中,可以使用WinINet库来实现HTTP上传文件。以下是一个示例接口,实现了通过POST方式上传本地文件到指定服务器,并传递了'path'、'file'和'md5_code'参数。
#include <afxinet.h>
BOOL UploadFile(const CString& serverPath, const CString& localFilePath, const CString& md5Code)
{
CInternetSession session;
CHttpConnection* pConnection = NULL;
CHttpFile* pFile = NULL;
try
{
pConnection = session.GetHttpConnection(serverPath);
pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("/upload.php"));
// 设置请求头
pFile->AddRequestHeaders(_T("Content-Type: multipart/form-data"));
// 构造请求参数
CString params;
params += _T("path=") + serverPath + _T("&");
params += _T("file=") + localFilePath + _T("&");
params += _T("md5_code=") + md5Code;
// 打开本地文件
CFile file;
if (!file.Open(localFilePath, CFile::modeRead | CFile::shareDenyWrite))
{
// 处理文件打开错误
throw std::runtime_error("Failed to open local file.");
}
// 获取文件大小
DWORD dwFileSize = file.GetLength();
// 设置请求内容长度
CString contentLength;
contentLength.Format(_T("Content-Length: %d"), dwFileSize);
pFile->AddRequestHeaders(contentLength);
// 发送请求
pFile->SendRequestEx(params.GetLength(), HSR_SYNC | HSR_INITIATE);
// 发送请求参数
pFile->WriteString(params);
// 发送文件内容
BYTE* pBuffer = new BYTE[dwFileSize];
file.Read(pBuffer, dwFileSize);
pFile->Write(pBuffer, dwFileSize);
delete[] pBuffer;
// 结束请求
pFile->EndRequest();
// 获取响应状态码
DWORD dwStatusCode;
pFile->QueryInfoStatusCode(dwStatusCode);
// 处理响应结果
if (dwStatusCode == HTTP_STATUS_OK)
{
// 文件上传成功
TRACE(_T("File uploaded successfully.
"));
return TRUE;
}
else
{
// 文件上传失败
TRACE(_T("File upload failed. Status code: %d
"), dwStatusCode);
return FALSE;
}
}
catch (CInternetException* e)
{
// 处理异常
TCHAR szErrMsg[1024];
e->GetErrorMessage(szErrMsg, 1024);
TRACE(_T("File upload failed. Error: %s
"), szErrMsg);
if (pFile != NULL)
pFile->Close();
if (pConnection != NULL)
pConnection->Close();
return FALSE;
}
// 清理资源
if (pFile != NULL)
pFile->Close();
if (pConnection != NULL)
pConnection->Close();
return FALSE;
}
请注意,上述代码仅供参考,你需要根据实际的服务器端要求和环境进行适当修改和调整。
原文地址: https://www.cveoy.top/t/topic/p3hg 著作权归作者所有。请勿转载和采集!