前提:Flutter 与 webview(vue) 一起开发的项目

开始的时候并没有想到什么移动端的,所以上传就用input,下载就用iframe来实现,然而真机实测的时候,input那个方法IOS支持但是安卓不支持,下载iframe那个方法则两端都不支持,于是,我们选择使用Flutter来实现.

下载功能.

首先在vue上面写个按钮触发,这里主要是用到Flutter与webview交互的方法,详情参考这里,其实主要就是在点击按钮的时候发个信号给Flutter,触发Flutter里面接收信号里面的代码.由于这里主要说上传下载,所以Flutter与webview之间的交互就略带过吧.

在Flutter里面,我是Dio+openFile来实现的,所以需要安装相关依赖dio | Dart Package 来实现下载和open_file | Flutter Package 来实现打开下载的文件这两个依赖,我是用Dio来实现下载,openfile实现下载完之后打开所下载的文件.直接在接收信号的那个方法里面调用该方法,传入实参就好了

直接贴上代码:

  void downloadFile(flowInid, fileName) async{
// 获取存储路径
String url = "http://XXX/download/fileDownload.htm?fileName=${fileName}&flowInid=${flowInid}";
print(url);
var _localPath = (await Path_provider.findLocalPath(context)) + '/Download/';
final savedDir = Directory(_localPath);
// 判断下载路径是否存在
bool hasExisted = await savedDir.exists();
// 不存在就新建路径
if (!hasExisted) {
savedDir.create();
}
Dio dio = new Dio();
//设置连接超时时间
dio.options.connectTimeout = 10000;
//设置数据接收超时时间
dio.options.receiveTimeout = 10000;
Response response = await dio.download(url, savedDir.path+fileName);
if (response.statusCode == 200) {
Navigator.pop(context);
print(savedDir.path+fileName);
String path1 = savedDir.path+fileName;
MyDiaLog.message(context, '下载成功! 存储路径是'+path1);
    OpenFile.open(path1);
//下载成功之后显示下载成功
// _controller.evaluateJavascript("uploadAfterFlutter()");
}

上传功能, 在Flutter里面,我这里主要使用 dio | Dart Package 来实现上传功能(详情点击链接看API) 和 file_picker | Flutter Package 来实现调取手机上的文件管理器

  _openFileExplorer(flowInid) async {
var fileUrl = await FilePicker.getFile();
//获取路径
setState(() {
this._file = fileUrl;
});
String path = fileUrl.path;
String fileNameShow = path.substring(path.lastIndexOf("/") + 1, path.length); // 文件名this._fileNameShow = fileNameShow;
FormData formData = FormData.from({
//"": "", //这里写其他需要传递的参数this.fileName
"file": UploadFileInfo(this._file, this._fileNameShow),
"flowInid": flowInid,
"fileName": this._fileNameShow
});
var response =
await Dio().post("http://XXXX/upload/ajaxFileUpload.htm", data: formData);
print(response);
if (response.statusCode == 200) {
print('response上传之后展示');
print(response);
_controller.evaluateJavascript("linkFlutter()"); // 上传成功之后调用的JS方法,类似刷新吧
}
}

在上传完之后的最后一个代码是调取使用webview里面的方法,具体也是看webview与Flutter的交互,上传成功是否需要执行webview某个方法视具体情境应用吧.其实在做上传下载功能的时候方法不止这种搭配,还有一个是 flutter_downloader | Flutter Package

也是可以实现的,实现方法有很多种的,具体看自己的项目吧.

Flutter,webview里面实现上传和下载的功能的更多相关文章

  1. [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能

    本文属于学习分享,如有雷同纯属巧合 利用业余时间.学习一些实用的东西,假设手又有点贱的话.最好还是自己也跟着敲起来. 在android上能够通过自带的ftp组件来完毕各种功能.这次是由于项目中看到用了 ...

  2. vue+springboot上传和下载附件功能

    https://blog.csdn.net/qq_35867245/article/details/84325385 上传附件(服务端代码) 第一步:在application.yml中配置附件要上传的 ...

  3. linux下实现ftp匿名用户的上传和下载文件功能

    1.配置/etc//vsftpd/vsftpd.conf 文件如下: 打开文件,改变如下选项,如果文件中没有该选项,需要自己手动编写该选项 write_enable=YES anonymous_ena ...

  4. ExtJS+SpringMVC文件上传与下载

    说到文件上传.下载功能,网络上大多介绍的是采用JSP.SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传.下载的目地.可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开 ...

  5. 基于hap的文件上传和下载

    序言 现在,绝大部分的应用程序在很多的情况下都需要使用到文件上传与下载的功能,在本文中结合hap利用spirng mvc实现文件的上传和下载,包括上传下载图片.上传下载文档.前端所使用的技术不限,本文 ...

  6. JavaWeb之文件上传和下载

    在如今的互联网时代,人们越来越喜欢将自己的数据存放到互联网上,于是便诞生了很多类型的软件,比如360网盘,百度网盘,云盘之类的.所以说,文件上传和下载的功能是现在非常主流的一个功能,应用十分广泛. 那 ...

  7. 【php】文件的上传与下载

    一. 生活中常见的地方: a) 例如邮箱.空间.文库.百度云.微爱等地方,都可以看到文件的上传和下载的应用,因此,上传和下载的功能非常重要!二. PHP当中的文件上传和下载 a) 我们需要进行一些设置 ...

  8. 全网最简单的大文件上传与下载代码实现(React+Go)

    前言 前段时间我需要实现大文件上传的需求,在网上查找了很多资料,并且也发现已经有很多优秀的博客讲了大文件上传下载这个功能. 我的项目是个比较简单的项目,并没有采用特别复杂的实现方式,所以我这篇文章的目 ...

  9. win7下利用ftp实现华为路由器的上传和下载

    win7下利用ftp实现华为路由器的上传和下载 1.  Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...

随机推荐

  1. SSTI(服务器模板注入)学习

    SSTI(服务器模板注入)学习 0x01 SSTI概念 SSTI看到ss两个字母就会想到服务器,常见的还有SSRF(服务器端请求伪造).SSTI就是服务器端模板注入(Server-Side Templ ...

  2. Vue列表实现滚动到指定位置样式改变

    这个需求大概是这样子: 我做的一个聊天Demo,在搜索框搜索用户,可以滚动到指定的用户.然后成选中状态. 这是目前状态,我搜索 南宫仆射 ,想要下面的用户列表直接滚动到 南宫仆射 并改变CSS样式. ...

  3. LTE网络概述

    LTE主要由两部分组成:无线接入技术演进(E-UTRAN)+系统架构演进(SAE):其中,SAE主要含有的是演进型分组交换核心网(EPC),其控制处理部分为移动性管理实体(MME),数据承载部分称为业 ...

  4. 今天主要做的是Remember Me(记住我)功能的实现

    功能就是让网站登录过的人只要不注销,下次打开网站之后直接进入,不用重复登录,此功能主要是session与cookie的配合运用,具体实现是这样的,在登录页面判断并完成登录,然后将所需数据写入sessi ...

  5. 【FreeRTOS实战汇总】小白博主的RTOS学习实战快速进阶之路(持续更新)

    博主是个小白,打算把这段时间系统学习RTOS的文章统一整理到这里,另外本文会给出一些参考性资料和指导性建议: 本文宗旨 FreeRTOS 是由Richard Barry在2003年由设计的,由于其设计 ...

  6. What?废柴, 模拟登陆,代码控制滑动验证真的很难吗?Are you kidding???

    1.简介 在前边的python接口自动化的时候,我们由于博客园的登录机制的改变,没有用博客园的登录测试接口.那么博客园现在变成了滑动验证登录,而且现在绝大多数的登录都变成这种滑动验证和验证码的登录验证 ...

  7. CPU瞒着内存竟干出这种事

    还记得我吗,我是阿Q,CPU一号车间的那个阿Q. 今天忙里偷闲,来到厂里地址翻译部门转转,负责这项工作的小黑正忙得满头大汗. 看到我的到来,小黑指着旁边的座椅示意让我坐下. 坐了好一会儿,小黑才从工位 ...

  8. Java并发编程(04):线程间通信,等待/通知机制

    本文源码:GitHub·点这里 || GitEE·点这里 一.概念简介 1.线程通信 在操作系统中,线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题, ...

  9. pyppteer下

    目录 启动pyppteer 切图 获取响应头,响应头状态,cookies 获取当前页面标题 获取页面html 第一种:获取整个页面html 第二种:只获取文本 注入JS,控制上下滚动 选择器 获取元素 ...

  10. nodejs上使用sql

    1.首先本地要安装mysql, https://www.mysql.com/downloads/. 2.在node中连接mysql,要安装mysql驱动,也就是npm安装mysql模块:npm i m ...