windowsclient开发--依据可下载url另存为文件(微信windowsclient这样做的)
能够我的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.h
Library Urlmon.lib
DLL Urlmon.dll
补齐上面的代码:
if (GetSaveFileName(&opfn))
{
URLDownloadToFile(NULL, url, file_name, NULL, NULL);
}
大功告成了~~等等,还有瑕疵:
再看看微信,假设另存为的名称已经存在,会有提示。而我们的程序没有:
这里还须要设置一下OPENFILENAME 的Flags,当中有一个叫:
OFN_OVERWRITEPROMPT
opfn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT;
windowsclient开发--依据可下载url另存为文件(微信windowsclient这样做的)的更多相关文章
- 微信小程序云开发-云存储-下载并打开文件文件(word/excel/ppt/pdf)
一.wxml文件 1.写文本框,用来获取文件链接. 2.按钮,点击下载文件 <!-- 下载文件(word/excel/ppt/pdf等) --> <view class=" ...
- android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题
1 若把APK文件保存到应用程序的files目录下,则一定注意保存时使用 FileOutputStream os = openFileOutput(fileName, MODE_WORLD_READA ...
- 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载
微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...
- [转] 三种Python下载url并保存文件的代码
原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib ...
- java 根据Url下载对应的文件到指定位置,读txt文件获取url
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- 关于scrapy下载文件重命名的办法以及对应url没有文件后缀的办法
https://www.jianshu.com/p/d1bb28cbb6a8 scrapy中负责下载文件的是class MyFilesPipeline(FilesPipeline)类 其中负责下载文件 ...
- MFC通过URL下载并保存文件代码 转载
http://blog.csdn.net/charlessimonyi/article/details/8666108?utm_source=tuicool&utm_medium=referr ...
- 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位
一.wxml文件 <!-- 上传.下载.打开文件一步执行 --> <view class="handle"> <button bindtap=&quo ...
- PHP管理供下载的APK文件
当我们开发的APP多的时候,把所有的APK文件统一放到一个目录中管理,是一个不错的选择: 管理的方法有很多,这里说一种: 1..创建目录结构,先创建根目录download,在根目录中创建项目目录,在项 ...
随机推荐
- js 函数分类2
js 通用监听函数实现 // 把所有方法封装到一个对象里面,充分考虑兼容写法 var EventUtil = { // 添加DOM事件 addEvent: function(element, type ...
- 解决xshell 、SecureCRT中文乱码
一.解决xshell 中文乱码 在xshell命令行里面 输入: locale输出: LANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERI ...
- codevs 线段树练习ⅠⅡⅢ
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- ORM-学生信息系统
学生信息管理 展示学生信息 URL部分 url(r'^student_list/', app01_views.student_list, name="student_list"), ...
- AC日记——Collectors Problem uva 10779
UVA - 10779 思路: 最大流: s向所有的贴纸的种类连边,流量为Bob拥有的数量: 然后,Bob的朋友如果没有这种贴纸,则这种贴纸向bob的朋友连边,容量1: 如果bob的朋友的贴纸很多大于 ...
- HDU 2555 陷阱(模拟,结构体数组)
这道题目意思很明白,有不确定的数据沙包和陷阱,还要排序···那就必须要用结构体+数组 /* 在地面上有N 个大小不等的长方形陷阱,每个陷阱的周长各不相同,每个参赛者都有一个沙包,闭上眼睛把它扔向地面, ...
- MapReduce 编程模板
1.MapReduce 编程模型的5个步骤: 1)迭代,将输入数据解析成 key/value 对: 2)将解析的 key/value经过Map处理映射成另一组key/value对: 3)根据key进行 ...
- Tarjan求LCA总结
Tarjan算法向上标记法:从x向上走到根节点,并标记所有经过的点从y向上走到根节点,当第一次遇到已标记的节点时,就找到了LCA(x, y)对于每个询问,向上标记法的时间复杂度最坏为O(n) 在深度遍 ...
- java中集合里的泛型
import java.util.ArrayList;/* * 泛型 : java jdk1.5新特性. * 泛型的好处 : * 1.将运行时的错诶提前到编译时. * 2.避免无谓的强制类型转换. * ...
- 【树状数组】【枚举约数】 - Ambitious Experiment
给定一个序列,支持以下操作: 对区间[l,r]的每个i,将1i,2i,3i,...这些位置的数都加d. 询问某个位置的数的值. 如果把修改看作对区间[l,r]的每个数+d,那么询问x位置上的数时,显然 ...