zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    网站外链建设如何布局关键词?
    Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)
    Spring源码地址和相关介绍的网址
    【转】Tomcat7.0.42源代码运行环境搭建
    【转】windows上自动设置java环境变量的脚本
    [转]SAP中找表的方法
    【转】linux shell ${}简单用法
    【转】linux下设置ssh无密码登录
    安装Java和Pycharm的步骤
    提取位于<title>...</title>内的文本标题内容
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7268102.html
Copyright © 2011-2022 走看看