能够我的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这样做的)的更多相关文章

  1. 微信小程序云开发-云存储-下载并打开文件文件(word/excel/ppt/pdf)

    一.wxml文件 1.写文本框,用来获取文件链接. 2.按钮,点击下载文件 <!-- 下载文件(word/excel/ppt/pdf等) --> <view class=" ...

  2. android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题

    1 若把APK文件保存到应用程序的files目录下,则一定注意保存时使用 FileOutputStream os = openFileOutput(fileName, MODE_WORLD_READA ...

  3. 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载

    微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...

  4. [转] 三种Python下载url并保存文件的代码

    原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib ...

  5. java 根据Url下载对应的文件到指定位置,读txt文件获取url

    package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  6. 关于scrapy下载文件重命名的办法以及对应url没有文件后缀的办法

    https://www.jianshu.com/p/d1bb28cbb6a8 scrapy中负责下载文件的是class MyFilesPipeline(FilesPipeline)类 其中负责下载文件 ...

  7. MFC通过URL下载并保存文件代码 转载

    http://blog.csdn.net/charlessimonyi/article/details/8666108?utm_source=tuicool&utm_medium=referr ...

  8. 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位

    一.wxml文件 <!-- 上传.下载.打开文件一步执行 --> <view class="handle"> <button bindtap=&quo ...

  9. PHP管理供下载的APK文件

    当我们开发的APP多的时候,把所有的APK文件统一放到一个目录中管理,是一个不错的选择: 管理的方法有很多,这里说一种: 1..创建目录结构,先创建根目录download,在根目录中创建项目目录,在项 ...

随机推荐

  1. Linux编写Shell脚本

    ——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...

  2. Java常见知识点(一)

    1.+不仅可作为加法运算符使用,还可作为字符串连接运算符使用.   2.a = b = c = 7;//虽然java支持这种一次为多个变量赋值的写法,但这种写法导致程序的可读性降低,因此不推荐这样写. ...

  3. selenium3+python自动化50-环境搭建(firefox)【转载】

    前言 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的. 安装环境过程中主要会遇到三个坑: 1.'geckodri ...

  4. 【集合类型的并发】Collections.synchronizedList

    摘要: 详细的解析:Collections.synchronizedList :关注要点,为什么在有synchroniezed方法的同时会出现 Collections.synchronizedList ...

  5. css “裁剪”图片(显示图片的一部分)

    背景:朋友有一个需求,就是列表页显示的图片要做裁剪,不然不按比例缩小图片看起来就变形了.本来想好的解决办法是用PHP来生成缩略图,然而试了好几个开源缩略图类都没有一个满意的,突然想到为什么不直接用CS ...

  6. scrapy snippet

    1. spider文件 from scrapy.contrib.spiders import CrawlSpider, Rule from scrapy.contrib.linkextractors. ...

  7. CF 1005A Tanya and Stairways 【STL】

    Little girl Tanya climbs the stairs inside a multi-storey building. Every time Tanya climbs a stairw ...

  8. HDU 1308 What Day Is It?(模拟,日期)

    解题报告:输入一个年月日,让你求出那一天是星期几,但是做这题之前必须先了解一点历史.首先在1582年之前,判断是否是闰年的标准是只要能被四整除就是闰年, 然后在1752年9月2号的后的11天被抹去了, ...

  9. 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束)

    layout: post title: 训练指南 UVA - 11478(最短路BellmanFord+ 二分+ 差分约束) author: "luowentaoaa" catal ...

  10. 洛谷——P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...