博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windowsclient开发--依据可下载url另存为文件(微信windowsclient这样做的)
阅读量:6209 次
发布时间:2019-06-21

本文共 2122 字,大约阅读时间需要 7 分钟。

能够我的blog的标题会让你误解,那么好,没图说了xx:

比方微信windowsclient发送了一张图片,我们能够预览这张图片,还能够保存到本地:
这里写图片描写叙述

那么windows程序是怎样下载这张图片的呢?

是这样。别人给你发了一张图片。这张图片的原图会存在微信的server上,这样这个文件就相应了一个可下载的url。

假设你拿到了这个url,用浏览器訪问。你就能够通过下载这个原图了。

可是。在浏览器下载是我们client控制不了的。下载路径也要在浏览器中设置。也不能方便的重命名。

那么这时候问题来了:

我们怎么样从一个url另存为这个文件呢?
这里写图片描写叙述

首先我们要弄出上面的另存为对话框吧,把文件要保存的位置。以及文件名称都设置好了,点击确定后再開始下载。

另存为对话框就不细说了。直接上代码了:

OPENFILENAME opfn;    WCHAR file_name[MAX_PATH] ;    //wstring转WCHAR数组    swprintf(file_name, image_name_.size() + 1, L"%ls", image_name_.c_str());    ZeroMemory(&opfn, sizeof(OPENFILENAME));    opfn.lStructSize = sizeof(OPENFILENAME);    //依据文件名称取出后缀名    std::wstring file_extension_name = image_name_;    size_t i = file_extension_name.rfind('.', file_extension_name.length());    if (i != string::npos) {        file_extension_name = file_extension_name.substr(i + 1, file_extension_name.length() - i);    }    //设置另存为文件的默认后缀名    std::wstring default_ext = file_extension_name;    opfn.lpstrDefExt = default_ext.c_str();    //设置筛选类型    file_extension_name = L"图片文件(*." + file_extension_name + L")";    opfn.lpstrFilter = file_extension_name.c_str();    opfn.nFilterIndex = 0;    opfn.lpstrFile = file_name;    opfn.nMaxFile = MAX_PATH;    opfn.hwndOwner = m_hWnd;    opfn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST ;    if (GetSaveFileName(&opfn))    {        //開始下载文件    }

上面的另存为工作完毕了,以下就差怎样下载了:

查查windows API,结果出现了:

URLDownloadToFile
作用:
Downloads bits from the Internet and saves them to a file.

原型:

HRESULT URLDownloadToFile(             LPUNKNOWN            pCaller,             LPCTSTR              szURL,             LPCTSTR              szFileName,  _Reserved_ DWORD                dwReserved,             LPBINDSTATUSCALLBACK lpfnCB);

參数就只是多介绍了,自己msdn吧!

最主要看下头文件和库:

Header                        Urlmon.hLibrary                        Urlmon.libDLL                             Urlmon.dll

补齐上面的代码:

if (GetSaveFileName(&opfn))    {        URLDownloadToFile(NULL, url, file_name, NULL, NULL);    }

大功告成了~~等等,还有瑕疵:

再看看微信,假设另存为的名称已经存在,会有提示。而我们的程序没有:
这里写图片描写叙述

这里还须要设置一下OPENFILENAME 的Flags,当中有一个叫:

OFN_OVERWRITEPROMPT

opfn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT;
你可能感兴趣的文章
还不会用正则?看Linux 中 grep 命令的 12 个实践例子
查看>>
单实例数据库迁移到rac环境(一)
查看>>
Cage与Spring的整合
查看>>
K8S二进制部署node节点
查看>>
Cisco路由器AAA配置
查看>>
51CTO博客2.0造星计划获奖图书收到拉!
查看>>
Server 2008 R2 AD RMS完整部署:用户创建篇
查看>>
阿里云开发者大赛记事
查看>>
传统创业者给互联网创业者上了一课
查看>>
详解SEO优化中所使用的新浪博客站群
查看>>
为未来学习
查看>>
在meshLab的3D场景中绘制2D透明信息面板
查看>>
sizeof(空类或空结构体)
查看>>
ALTER INDEX Rebuild Reorganize 索引 重建 重组 碎片率
查看>>
codeblocks 树的遍历 递归和非递归
查看>>
JQUERY系列之一:事件绑定
查看>>
使用LINQPad调试Linq和Entity Framework
查看>>
【黑金视频连载】FPGA NIOSII视频教程(08)--RTC实验
查看>>
《Windows核心编程》学习笔记(6)– 线程的创建、与进程的关系、伪句柄转换...
查看>>
C#之重载与覆盖
查看>>