需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明。

URLDownloadToFile()函数的定义如下:

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

Parameters(参数含义):


pCaller

Pointer to the controlling IUnknown interface of the calling Microsoft ActiveX component (if the caller is an ActiveX component).

Microsoft ActiveX控件的接口的指针,如果不是控件,则为NULL

szURL

Pointer to a string value containing the URL to be downloaded. Cannot be set to NULL

要下载的url地址,不能为空

szFileName

Pointer to a string value containing the name of the file to create for bits that come from the download.

下载后保存的文件名

dwReserved

Reserved. Must be set to 0.

保留字段,必须为0

lpfnCB

Pointer to the caller's IBindStatusCallback interface. URLDownloadToFile calls this interface's IBindStatusCallback::OnProgress method on a connection activity, including the arrival of data. IBindStatusCallback::OnDataAvailable is never called.

下载进度状态回调

Return Value
Returns one of the following values.
S_OK : The download started successfully.
E_OUTOFMEMORY: The buffer length is invalid, or there is insufficient memory to complete the operation.
INET_E_DOWNLOAD_FAILURE:The specified resource or callback interface was invalid.

 
由于函数的参数使用的是LPWSTR,而我们常用的是string,所以用到了MultiByteToWideChar()函数将string转为LPWSTR
 
代码如下

 /*
@author:CodingMengmeng
@theme:C++根据图片url下载图片
@time:2017-1-6 22:58:00
@blog:http://www.cnblogs.com/codingmengmeng/
*/
#include <tchar.h>
#include <iostream>
#include <urlmon.h>
/*
#pragma comment(lib,"urlmon.lib")作用:
连接静态库到项目中,效果等同于:
项目属性——链接器——输入——附加依赖项中加入这个lib
(头文件<urlmon.h>中只是包含了数据结构和函数声明,是编译阶段;
链接阶段将从静态库中恢复这些函数和数据并把他们和应用程序中的其它模块组合在一起生成可执行文件,
该过程称为“静态链接”)
*/
#pragma comment(lib,"urlmon.lib")
using namespace std; int _tmain(int argc, char* argv[])
{
string url = "http://pic104.nipic.com/file/20160715/6171480_185807154956_2.jpg";
size_t len = url.length();//获取字符串长度
int nmlen = MultiByteToWideChar(CP_ACP, , url.c_str(), len + , NULL, );//如果函数运行成功,并且cchWideChar为零,
//返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。
wchar_t* buffer = new wchar_t[nmlen];
MultiByteToWideChar(CP_ACP, , url.c_str(), len + , buffer, nmlen);
HRESULT hr = URLDownloadToFile(NULL, buffer,_T("E:\\C++lianxi\\Blog\\urlDownload2File\\urlDownload2File\\sky.jpg"), , NULL);
if (hr == S_OK)
{
cout << "ok" << endl;
}
return ;
}

运行结果

程序输出ok,且在指定目录中也保存了下载到的图片。

以上。

C++根据图片url下载图片的更多相关文章

  1. java通过图片URL下载图片

    public InputStream getInputStream(String imgUrl) { InputStream inputStream = null; try{ HttpURLConne ...

  2. 从url下载图片--java与python实现方式比较

    从url下载图片--java与python实现方式比较 博客分类: 技术笔记小点滴 javapython图片下载  一.java的实现方式 首先读取图片 //方式一:直接根据url读取图片 priva ...

  3. JAVA 通过url下载图片保存到本地

    //java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造U ...

  4. Java学习笔记——IO操作之以图片地址下载图片

    以图片地址下载图片 读取给定图片文件的内容,用FileInputStream public static byte[] mReaderPicture(String filePath) { byte[] ...

  5. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

  6. QT通过url下载图片到本地

    /* strUrl:下载图片时需要的url strFilePath:下载图片的位置(/home/XXX/YYY.png) */ void ThorPromote::downloadFileFromUr ...

  7. 根据URL地址获取对应的HTML,根据对应的URL下载图片

    核心代码(获取HTML): #region 根据URL地址获取信息GET public static String GetResult(string url) { return GetResult(u ...

  8. js 根据url 下载图片

    downloadIamge(imgsrc, name) {//下载图片地址和图片名 let image = new Image(); // 解决跨域 Canvas 污染问题 image.setAttr ...

  9. vue.js如何根据后台返回来的图片url进行图片下载

    最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,后台返回来的是一串图片url,试了很多种方法,发现点击下载时出来的效果都是跳着到一个新的图片网页,后来经过一番琢磨,终于解决了 ...

随机推荐

  1. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  2. 定位框一闪而过 iOS Swift

    需求:获取经纬度. 方案:我自定义了一个类模块CLLocationModule.swift 备注以下代码里 let IS_IOS8 = (UIDevice.currentDevice().system ...

  3. myql Connect

    mysql折腾笔记 2014-01-05 10:58 经常吹嘘自己玩过各种数据库. redis, mysql, sqlite, mongodb..常用数据库都不在话下,不料今天却在远程连接mysql上 ...

  4. CSS-垂直|水平居中问题的解决方法总结

    题外话:前两天和专业老师探讨最近的一个项目,涉及到对一个浮动的盒子局中的问题,老师的解决方法打开了我的新思路.让我有了总结一下平时的居中问题的想法.不然可能忘掉了以后又要到处寻找解决办法了.另外也给我 ...

  5. URL.createObjectURL和URL.revokeObjectURL

    一.URL.createObjectURL URL.createObjectURL()方法会根据传入的参数创建一个指向该参数对象的URL. 这个URL的生命仅存在于它被创建的这个文档里,新的对象URL ...

  6. Bootstrap学习笔记博客

    本片博客用于记录之后要用到Bootstrap的学习笔记   概括: Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASC ...

  7. 第八章 交互技术,8.4 Weex 双11会场大规模应用的秒开实战和稳定性保障(作者:鬼道)

    8.4 Weex 双11会场大规模应用的秒开实战和稳定性保障 前言 Native 开发的诸多亮点中,流畅体验和系统调用是最多被提及的.流畅体验体现在页面滚动/动画的流畅性,背后是更好的内存管理和更接近 ...

  8. Web API系列(二)接口安全和参数校验

    以前简单介绍过web api 的设计,但是还是有很多朋友问我,如何合理的设计和实现web api.比如,接口安全,异常处理,统一数据返回等问题.所以有必要系统的总结总结 web api 的设计和实现. ...

  9. 堆排序分析及php实现

    堆排序:是一种特殊形式的选择排序,他是简单选择排序的一种改进. 什么是堆? 具有n个元素的序列:{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1) 或者 (ki ...

  10. Angular datetime format

    <!DOCTYPE html> <html lang="en"> <head> <script type="text/javas ...