微搭低代码入门05文件的上传和下载

devtools/2024/9/22 21:34:33/

目录

  • 1 创建数据源
  • 2 创建应用
  • 3 创建页面
  • 4 设置导航功能
  • 5 文件上传
  • 6 文件下载
  • 总结

小程序中,我们通常会有文件的上传和下载的需,在微搭中,文件是存放在云存储中,每一个文件都会有一个唯一的fileid,我们本篇就介绍如何通过fileid来实现文件的上传和下载。

1 创建数据源

传统开发对于文件的上传和下载可能需要考虑文件的IO,需要先创建文件,然后通过流进行写入,读取的时候也是通过流进行读取。

低代码的话没有那么复杂,我们的文件是借助数据源来完成的。打开控制台,点击数据模型,点击新建,我们先创建一个数据源
在这里插入图片描述
输入数据源的名称,附件上传,点击创建
在这里插入图片描述
点击编辑创建字段
在这里插入图片描述
输入字段名称附件,字段类型选择文件
在这里插入图片描述
点击保存就完成了数据源的创建

2 创建应用

微搭不需要你写额外的代码实现文件的上传,我们使用表单容器即可。点击应用,点击新建应用,创建一个空白应用
在这里插入图片描述
在这里插入图片描述

3 创建页面

在应用编辑器的左上角点击新建页面的图标,新建两个页面,分别是附件上传和附件下载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 设置导航功能

像这种有多个页面的,我们可以通过宫格导航来进行页面的跳转,从右侧的组件库里选择宫格导航,拖入到编辑区
在这里插入图片描述
选中宫格导航,设置导航设置,将菜单改为文件上传和文件下载,选择具体的页面
在这里插入图片描述
在这里插入图片描述

5 文件上传

切换到文件上传的页面,从右侧的组件库添加表单容器到编辑区
在这里插入图片描述
数据模型选择附件上传
在这里插入图片描述
上传成功后,我们需要返回首页,选择组件内置方法等6个事件
在这里插入图片描述
在表单提交成功时增加一个事件,动作选择返回上一页
在这里插入图片描述

6 文件下载

切换到文件下载页面,添加数据列表组件到编辑区
在这里插入图片描述
数据模型选择附件上传
在这里插入图片描述
我们需要处理一下字段的显示,第一个文本组件绑定的内容,我们要用表达式提取出文件名来
在这里插入图片描述
输入如下表达式

$w.item_listView1.fj.split('/').pop().replace(' ', '_').split('-').pop()

图标改成下载的图标
在这里插入图片描述
点击图标的时候要执行下载,在代码区新建一个javascript方法
在这里插入图片描述
在JavaScript代码中输入如下代码

export default async function({event, data}) {  // 假设 data.target 是一个文件的云存储路径或其他有效的下载URL  const tempfile = await $w.cloud.getTempFileURL(data.target)const downloadTask = wx.downloadFile({  url: tempfile, // 文件的下载链接  success: function(res) {  if (res.statusCode === 200) {  // 获取文件系统的管理器  const fsManager = wx.getFileSystemManager();  // 文件的保存路径(自定义路径,确保该目录存在)  const saveFilePath = wx.env.USER_DATA_PATH + '/'+data.target.split('/').pop().replace(' ', '_').split('-').pop();  // 保存文件到本地  fsManager.saveFile({  tempFilePath: res.tempFilePath, // 临时文件路径  filePath: saveFilePath, // 本地文件路径  success: function(res) {  // 保存成功后的操作  console.log('文件已保存到本地:', res.savedFilePath);  $w.utils.showToast({  title: '下载成功',  icon: 'success',  duration: 2000,  });  },  fail: function(err) {  // 保存失败后的操作  console.error('保存文件失败:', err);  $w.utils.showToast({  title: '下载失败',  icon: 'none',  duration: 2000,  });  }  });  }  },  fail: function(err) {  // 下载失败后的操作  console.error('下载文件失败:', err);  $w.utils.showToast({  title: '下载失败',  icon: 'none',  duration: 2000,  });  }  });  }

在给图标定义点击事件的时候,需要传入参数
在这里插入图片描述
在这里插入图片描述
可以看到,微搭中附件是按照路径存储的,我们在下载的时候,先需要将路径换成临时地址就是一个互联网的访问地址

const tempfile = await $w.cloud.getTempFileURL(data.target)

有了这个地址,我们先调用downloadFile方法将文件下载到小程序的临时目录,然后再构造一个目录,将文件真实存储起来

比较难受的是,下载的文件并不会存放到你的手机的一个目录里,因此也就无法直接打开

这个时候需要结合wx.openDocument进行打开显示,要不然用户看到下载成功却无法找到就很难受,但是openDocument只支持几种格式doc、xls、ppt、pdf,所以在规划功能的时候是需要考虑一下的。

总结

我们本篇带着大家实现了一下文件的上传和下载功能,上传我们使用现成的组件实现,下载需要结合小程序的API去调用,还需要注意一些潜在的限制。要是H5的话我们就不需要这么麻烦,有了临时链接直接打开地址就可以实现下载功能了。


http://www.ppmy.cn/devtools/35559.html

相关文章

基于springboot实现迪迈手机商城设计系统项目【项目源码+论文说明】

基于springboot实现迪迈手机商城设计系统演示 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。…

2023年乡镇街道边界数据、行政村边界、省市县区划边界、建筑轮廓边界数据、流域边界数据、降雨量分布、气温分布、道路网分布

数据范围:全国行政区划-行政乡镇街道边界 数据类型:面状数据,全国各省市县【乡镇-边界】乡村界、乡村范围 数据属性:标准12位行政区划编码、乡镇名称、所属地区 分辨率:1:2万--1:5万 数据格式:SHP数据&…

[JUCE库]关于JUCE如何生成动态链接库 juce-7.0.1-windows

前言 当我们在使用JUCE库的时候,可能会需要使用到静态链接的方式,还好的一点是JUCE本身提供了CMake编译,也提供了单独的sln编译。 本文章仅针对juce-7.0.1-windows,由于不同版本之间差异较大,可能不能通用&#xff0…

501. 二叉搜索树中的众数

501. 二叉搜索树中的众数 题目描述: 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返…

Redis探索之旅(基础)

目录 今日良言:满怀憧憬,阔步向前 一、基础命令 1.1 通用命令 1.2 五大基本类型的命令 1.2.1 String 1.2.2 Hash 1.2.3 List 1.2.4 Set 1.2.5 Zset 二、过期策略以及单线程模型 2.1 过期策略 2.2 单线程模型 2.3 Redis 效率为什么这么高 三…

FastAdmin实现后台菜单自定义方法

FastAdmin实现后台菜单自定义显示,默认显示的是编辑和删除操作,我们有的时候是需要增加一些功能性的按钮,例如审核,或者说更多的关联性的信息。那么我们就可以按如下的操作去做 上面是默认展示的功能图片,下面我来简单…

第78天:WAF攻防-菜刀冰蝎哥斯拉流量通讯特征绕过检测反制感知

目录 案例一: 菜刀-流量&绕过&特征&检测 菜刀的流量特征 案例二:冰蝎-流量&绕过&特征&检测 冰蝎使用教程 冰蝎的流量特征 案例三: 哥斯拉-流量&绕过&特征&检测 哥斯拉使用教程 哥斯拉的流量特征…

设计模式:工厂模式

工厂是每个开发人员都应该知道的关键创造模式之一。它们是许多高级模式的主要组成部分。很长一段时间,我在不同类型的工厂模式上遇到了麻烦。此外,在同一篇文章中很难找到有关这些类型的信息。本文介绍 4 种类型的工厂模式: 工厂方法模式&…