代码先锋网 代码片段及技术文章聚合

根据URL下载文件,C++实现,MFC框架

需要头文件afxinet.h

//返回值解析:
//  0:成功下载保存
//- 1:URL不正确
//- 2:建立网络连接失败
//- 3:向服务器发起GET请求失败
//- 4:服务器不接受请求
//- 5:参数一不能为空
//- 6:参数二不能为空
//- 7:保存文件时创建或写入文件失败
INT GetInternetFile(const CString fileUrl,const CString fileName){
    if (fileUrl.IsEmpty())
        return -5;
    unsigned short nPort;//服务器端口号
    CString Server, FileObject;
    DWORD dwServiceType, dwRet;//服务类型,GET请求的状态号
    //解析URL
    if (!AfxParseURL(fileUrl, dwServiceType, Server, FileObject, nPort)){
        //MessageBox(_T("解析URL失败"));
        return -1;
    }
    //创建网络连接对象,http连接对象指针和用于该连接的文件指针,注意delete
    CInternetSession intsess;
    CHttpFile * pHtFile = NULL;
    //建立连接
    CHttpConnection * pHtCon = intsess.GetHttpConnection(Server, nPort);
    if (pHtCon == NULL){
        intsess.Close();
        //MessageBox(_T("建立连接失败"));
        return -2;
    }
    //发起Get请求
    pHtFile = pHtCon->OpenRequest(CHttpConnection::HTTP_VERB_GET, FileObject);
    if (pHtFile == NULL){
        intsess.Close();
        delete pHtCon;
        pHtCon = NULL;
        //MessageBox(_T("Get请求失败"));
        return -3;
    }
    //提交请求
    pHtFile->SendRequest();
    //获取状态号
    pHtFile->QueryInfoStatusCode(dwRet);
    if (dwRet != HTTP_STATUS_OK){
        intsess.Close();
        delete pHtCon;
        pHtCon = NULL;
        delete pHtFile;
        pHtFile = NULL;
        //MessageBox(_T("服务器不接受请求"));
        return -4;
    }
    //获取文件大小
    UINT nFileLen = (UINT)pHtFile->GetLength();
    DWORD dwRead = 1;//用于表示读取的数量
    //创建缓冲区
    char * szBuffer = new char[nFileLen + 1];
    try{
        //创建文件,下载文件重命名为fileName
        CFile newFile(fileName, CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive);
        while (dwRead>0){
            memset(szBuffer, 0, (size_t)(nFileLen + 1));
            dwRead = pHtFile->Read(szBuffer, nFileLen);
            newFile.Write(szBuffer, dwRead);
        }
        newFile.Close();
        delete[]szBuffer;
        delete pHtFile;
        delete pHtCon;
        intsess.Close();
    }
    catch(CFileException e){
        delete[] szBuffer;
        delete pHtFile;
        delete pHtCon;
        intsess.Close();
        //MessageBox(_T("文件读写异常"));
        return -7;
    }
    return 0;
 }
版权声明:本文为u014261408原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014261408/article/details/90109324

智能推荐

js根据URL下载文件

两种情况 url经过后端处理,返回的是文件流 url没有经过后端处理,返回的是文件存储地址url 第一种情况: window.open('url') 缺点:会打开一个新的窗口,请求完成后自动关闭,用户体验不是特别好,但是问题不大 <a href="url" download="文件名"></a> 虽然不会打开新弹窗,但是兼容性不好,I...

java根据url下载文件

1.需要参数 remoteFilePath:url地址 fileName:文件名称 2.代码实现...

根据链接url下载文件

代码: 参考: https://blog.csdn.net/weixin_44779945/article/details/110879030...

猜你喜欢

VUE根据url下载文件

方法一: 方法二:(会出现跨域问题) 方法三:不跳转页面,直接下载。最完美!!! 方法四:最简单粗暴,一行代码搞定...

js 下载文件(根据URL下载文件,根据URL下载图片)

根据URL下载图片 根据URL下载文件 实战测试...

js 根据url下载文件并监听下载进度

需求是做一个根据文件的url地址下载文件的功能,但是对于大文件来说下载周期较长,等待时间页面无反应,体验不够好,这时候就需要获取到文件的下载进度。查阅了相关资料,这里做一些记录。...

【根据文件URL;前端js实现浏览器下载文件】

已知文件URL;前端实现下载 为了防止打开是预览;采用这样方法下载;直接调用即可;...