在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;
}

请注意,上述代码仅供参考,你需要根据实际的服务器端要求和环境进行适当修改和调整。

MFC环境下使用WinINet库实现HTTP上传文件接口

原文地址: https://www.cveoy.top/t/topic/p3hg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录