Unity WebView 插件⭐️(二十)插件实例——实现 网页视图 中的 文件下载 功能

举报
呆呆敲代码的小Y 发表于 2021/09/27 09:58:07 2021/09/27
【摘要】 📢前言该文章是WebView 插件系列文章,传送门:浏览器插件3D WebView专栏前面的文章对3D WebView 插件的 一些基本的API方法 做了一个详细的介绍说明那本篇文章就来结合实例来实现该插件中的一些常用的案例,后面还会不断更新该插件常用的一些案例演示! 🔔3D WebView 插件实例本篇文章来结合实例演示一下之前的文章中介绍的一些API实际的使用方法下面就一起来看一...

📢前言

该文章是WebView 插件系列文章,传送门:浏览器插件3D WebView专栏

前面的文章对3D WebView 插件的 一些基本的API方法 做了一个详细的介绍说明

那本篇文章就来结合实例来实现该插件中的一些常用的案例,后面还会不断更新该插件常用的一些案例演示!
请添加图片描述


🔔3D WebView 插件实例

本篇文章来结合实例演示一下之前的文章中介绍的一些API实际的使用方法

下面就一起来看一下怎样 实现 网页视图 中的 文件下载 功能吧!

本教程使用的 Unity版本为2020.3.8


🎄实现网页视图中的 文件下载 功能

我们平时在正常访问浏览器网页时遇到可以下载的文件都是可以直接点下载的

但是在该浏览器插件中需要自己配置一下,不然是无法进行文件下载的哦!

那本篇文章就来讲一下怎样配置才能使用该插件进行文件下载叭!

使用Unity新建一个项目 并把Windows版本的插件导入之后


🚩1.打开实例场景中的SimpleWebViewDemo场景,添加文件下载的方法

上一篇 网页视图 随时更新当前的网址,包括网页的前进和后退 也是在该场景做的示例,我们还是在这里做一个示例

打开该场景后,新建一个脚本WebViewTest,挂载到场景中的游戏对象上面

之前在介绍插件中的IWithDownloads接口的时候提过 文件下载 的事情

只需要下面两行代码就可以开启插件中的 文件下载 的功能

//将 IWebView 实例转换为 对应的下载接口
var webViewWithDownloads = _webViewPrefab.WebView as IWithDownloads;
//开启WebView中的下载功能
 webViewWithDownloads.SetDownloadsEnabled(true);

但是只是加这两行代码开启下载功能之后,我们并不知道下载的文件本保存到哪里,而且下载进度和是否下载完毕我们都没有一个及时通知

所以还需要写代码来查看下载文件的一些其他相关信息!

代码如下:

//将 IWebView 实例转换为 对应的下载接口
var webViewWithDownloads = webViewPrefab.WebView as IWithDownloads;
if (webViewWithDownloads != null) {
    //开启WebView中的下载功能
    webViewWithDownloads.SetDownloadsEnabled(true);
    //下载进度发生变化的监听
    webViewWithDownloads.DownloadProgressChanged += (sender, eventArgs) => {
        //打印文件下载的相关信息
        Debug.Log(
            $@"DownloadProgressChanged:
            Type: {eventArgs.Type},
            Url: {eventArgs.Url},
            Progress: {eventArgs.Progress},
            FilePath: {eventArgs.FilePath},
            ContentType: {eventArgs.ContentType}"
        );
        if (eventArgs.Type == ProgressChangeType.Finished) {
            Debug.Log("文件下载完成");
        }
    };
}

我们使用上面这个代码就可以看到文件下载的相关信息了

一起来看一下使用该代码后的效果:
请添加图片描述

🚩2.将下载的文件移动至指定文件夹

下载的文件默认保存到缓存路径中,可以根据打印的日志来看
eventArgs.FilePath就是文件被保存的路径!

我们使用代码将下载的文件移动到我们指定的文件夹中

移动文件的代码如下:

                if (eventArgs.Type == ProgressChangeType.Finished)
                {
                    //截取下载文件的名字
                    string FileName = eventArgs.FilePath.Substring(eventArgs.FilePath.LastIndexOf(@"\") , eventArgs.FilePath.Length - eventArgs.FilePath.LastIndexOf(@"\"));
                    Debug.Log("文件名:"+FileName);

                    //指定的目标文件夹
                    string someOtherLocation = Application.dataPath + "/DownFile"+FileName;
                    //移动文件的方法
                    File.Move(eventArgs.FilePath, someOtherLocation);
                }

使用上面代码就可以将下载的文件移动到我们指定的文件夹中了

  • eventArgs.FilePath为默认的文件完整路径
  • Application.dataPath为Unity的Assets文件夹
  • someOtherLocation 的路径为我们指定的目标文件夹,我这里的路径为:Assets/DownFile

本实例完整代码如下:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using Vuplex.WebView;

public class WebViewTest : MonoBehaviour
{
    WebViewPrefab _webViewPrefab;
    private void Start()
    {
        _webViewPrefab = GameObject.Find("WebViewPrefab").GetComponent<WebViewPrefab>(); 
        _webViewPrefab.Initialized += (initializedSender, initializedEventArgs) =>
        {
            DownLoad();
        };
    }

    void DownLoad()
    {
        var webViewWithDownloads = _webViewPrefab.WebView as IWithDownloads;
        if (webViewWithDownloads != null)
        {
            webViewWithDownloads.SetDownloadsEnabled(true);
            webViewWithDownloads.DownloadProgressChanged += (sender, eventArgs) => {
                Debug.Log(
                    $@"DownloadProgressChanged:
            Type: {eventArgs.Type},
            Url: {eventArgs.Url},
            Progress: {eventArgs.Progress},
            FilePath: {eventArgs.FilePath},
            ContentType: {eventArgs.ContentType}"
                );

                if (eventArgs.Type == ProgressChangeType.Finished)
                {
                    //截取下载的文件名
                    string FileName = eventArgs.FilePath.Substring(eventArgs.FilePath.LastIndexOf(@"\") , eventArgs.FilePath.Length - eventArgs.FilePath.LastIndexOf(@"\"));
                    Debug.Log("文件名:"+FileName);

                    //指定的目标文件夹
                    string someOtherLocation = Application.dataPath + "/aaa/ttt"+FileName;
                    //移动文件的方法
                    File.Move(eventArgs.FilePath, someOtherLocation);
                }
            };
        }
     
    }
}

这样就可以正常使用 WebView中的 文件下载功能了,还可以指定相应的文件夹,下载完毕后移动到指定文件夹中!

完整效果如下:
请添加图片描述


💬总结

本篇文章对该插件的文件下载结合示例进行了一个讲解

包括下载文件和移动文件都可以实现了

不过要注意的是,下载完了之后再Unity中并不会立刻显示出来,需要刷新一下就可以在对应的文件夹中看到下载的文件了!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。