vc中实现通过http的post方式上传文件
时间: 2023-08-30 17:04:27 浏览: 54
在VC中实现通过HTTP的POST方式上传文件,可以使用WinINet库中提供的API函数。下面是一个简单的示例代码:
```c++
#include <windows.h>
#include <wininet.h>
BOOL HttpPostFile(LPCTSTR lpszServer, LPCTSTR lpszObjectName, LPCTSTR lpszFilePath)
{
BOOL bResult = FALSE;
HINTERNET hInternet = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
DWORD dwFileSize = 0;
DWORD dwBytesRead = 0;
DWORD dwBytesWritten = 0;
BYTE* pBuffer = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
// 打开本地文件
hFile = CreateFile(lpszFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
goto Exit;
}
// 获取本地文件大小
dwFileSize = GetFileSize(hFile, NULL);
if (dwFileSize == INVALID_FILE_SIZE)
{
goto Exit;
}
// 分配缓冲区
pBuffer = new BYTE[dwFileSize];
if (pBuffer == NULL)
{
goto Exit;
}
// 读取本地文件到缓冲区
if (!ReadFile(hFile, pBuffer, dwFileSize, &dwBytesRead, NULL))
{
goto Exit;
}
// 打开网络会话
hInternet = InternetOpen(TEXT("MyApp"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hInternet == NULL)
{
goto Exit;
}
// 建立连接
hConnect = InternetConnect(hInternet, lpszServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (hConnect == NULL)
{
goto Exit;
}
// 创建请求
hRequest = HttpOpenRequest(hConnect, TEXT("POST"), lpszObjectName, NULL, NULL, NULL, 0, 0);
if (hRequest == NULL)
{
goto Exit;
}
// 发送请求头
if (!HttpSendRequest(hRequest, NULL, 0, NULL, 0))
{
goto Exit;
}
// 发送请求体(即上传文件内容)
if (!InternetWriteFile(hRequest, pBuffer, dwFileSize, &dwBytesWritten))
{
goto Exit;
}
bResult = TRUE;
Exit:
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
}
if (pBuffer != NULL)
{
delete[] pBuffer;
}
if (hRequest != NULL)
{
InternetCloseHandle(hRequest);
}
if (hConnect != NULL)
{
InternetCloseHandle(hConnect);
}
if (hInternet != NULL)
{
InternetCloseHandle(hInternet);
}
return bResult;
}
```
使用该函数上传文件的代码如下:
```c++
if (!HttpPostFile(TEXT("www.example.com"), TEXT("/upload"), TEXT("C:\\test.txt")))
{
MessageBox(NULL, TEXT("上传文件失败!"), TEXT("Error"), MB_OK | MB_ICONERROR);
}
else
{
MessageBox(NULL, TEXT("上传文件成功!"), TEXT("Success"), MB_OK | MB_ICONINFORMATION);
}
```
其中,第一个参数是服务器的域名或IP地址,第二个参数是上传文件的目标地址,第三个参数是本地文件的路径。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)