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

目录

  • 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.mzph.cn/bicheng/7185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity类银河恶魔城学习记录 17-1,2 p166 Aliments fx p167 Blackhole additional vfx

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic; …

智能Agent:未来社会的角色、发展路径与挑战

​​​​​​​ 随着人工智能技术的不断发展,智能Agent已经成为了我们生活中越来越重要的一部分。从智能助手到自动驾驶汽车,再到语音助手和智能家居系统,智能Agent正在以多种形式渗透到我们的日常生活中。但随着Agent AI的智能化水平不断提…

第Ⅷ章-Ⅰ 组合式API初识

第Ⅷ章-Ⅰ 组合式API初识 简介setup 函数 为什么要使用Composition API逻辑复用和组织更灵活的逻辑组合适应未来的 Vue 生态系统 options API存在的问题代码重复:逻辑分散缺乏复用性 Composition API 中的 setup()入口props 参数context 参数 ref 响应式监听reactiv…

Vue3(管理系统)-封装axios(utils)

一、在utils下编写request.js实例 1.添加基地址,设置超时时间 import axios from axios const baseURL http://big-event-vue-api-t.itheima.net const instance axios.create({// TODO 1. 基础地址,超时时间baseURL,timeout: 3000 }) 2.添加请求拦截…

[C++][数据结构]红黑树的介绍和模拟实现

前言 之前我们简单学习了一下搜索树和平衡搜索树,今天我们来学习一下红黑树 简介 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着…

为什么技术面一般不谈薪资?

我这些年做了很招聘工作,一般都被告知在技术面时不谈论薪资。 其实我一直觉得挺麻烦的,这人不就是我决定要不要吗? 我除了评估技术能力是否合格,再根据开价情况来做决定不就完事吗。每次面完我再等着HR去谈完薪资,然…

面试官:关于HTTPS/HTTP2/HTTP3你懂多少?

公众号:程序员白特,欢迎一起交流学习~ HTTPS是什么 HTTP为什么不安全? https被认为是通信安全的http,除了http多了s和默认端口改成了443之外,其他都是沿用的http(除了明文和不安全)&#xff0…

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)

1、前言 在逻辑设计中,为了保证运算结果的正确性,常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加,只有将结果设定为4bits,才能保证结果一定是正确的。不然,某些情况如77 14(1110),如果结果只…

SOLIDWORKS Electrical由3D布局生成2D机柜布局图

想要转换3D装配体到Electrical中需要在3D打开Electrical插件,并使用工程管理器打开需转换工程图的装配体 1、创建2D图纸 打开后在上方工具选项卡中选择-SOLIDWORKS Electrical选项卡-的创建2D图纸 2、选择图纸视角 使用创建2D图纸后就会进入工程图界面,在…

裁员为什么先裁技术人员?

最近这个问题比较火,我分享一个印象深刻的答案:楼盖完了,还需要搬砖的吗? 这个答案让我对互联网/程序员这个行业/职业有了新的认识。 房地产是在现实世界里盖房子,互联网是在虚拟世界里盖房子,只不过互联网…

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

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

调用第三方接口——支付宝付款

沙箱环境是支付宝开放平台为开发者提供的用于接口开发及主要功能联调的模拟环境。 参考 登录 - 支付宝 在沙箱环境下,已经分配好了用于模拟测试的应用信息、商家信息、买家信息等 小程序文档 - 支付宝文档中心 内网穿透(支付宝付款需要在公网进行检查…

PyTorch深度学习框架:从入门到实战

前言 学习 PyTorch 深度学习框架之前先学会深度学习和卷积神经网络 CNN ,这样学习起来会更香嗷。 Windows系统下PyTorch的环境配置 Anaconda是什么: Anaconda是一个开源的Python发行版本,专注于数据分析领域。它包含了conda、Python等190多…

为什么感觉没有效果

以前在辅导小儿作业的时候,我会在常用的搜索引擎里去寻找答案,一般情况下都能解决问题。 但是最近一段时间,我发现,搜索引擎搜出来的结果还没有利用短视频搜出来的答案更全面,短视频软件不仅可以显示AI整理出来的答案…

CTF(Web)中关于执行读取文件命令的相关知识与绕过技巧

在我遇到的题目中,想要读取文件必然是要执行cat /flag这个命令,但是题目当然不会这么轻松。让你直接cat出来,必然会有各种各样的滤过条件,你要做的就是尝试各种方法在cat /flag的基础上进行各种操作构建出最终的payload。 下面我…

【C++风云录】跨越星辰大海:六大库在宇宙物理学和天文学的实际应用

走近科学:理解和利用宇宙物理学与天文学的科研工具 前言 本文将探讨六个不同的库,分别是HEALPix,CCfits,CFITSIO,WCSLIB,AstroPy和ROOT,他们在宇宙物理学和天文学中的重要应用。我们将详细介绍…

【LeetCode 121】买卖股票的最佳时机

思路 思路: 所谓代码的复杂性来源于业务的复杂性,如果能够想清楚业务实现逻辑,就能够轻松写出代码; 假设当前是第i天,如何在第i天赚到最多的钱?需要在第i天之前以最低价买入股票; 所以需要求…

微博视频怎么下载无水印

在当今社交媒体时代,微博已经成为人们获取信息、分享生活的重要平台之一。许多人在浏览微博时常常遇到一个问题:如何下载微博视频而不留下烦人的水印呢?今天,我将分享一些神秘的方法,让你轻松解锁微博视频的无水印下载技巧。 第…

Python实现2048游戏

提供学习或者毕业设计使用,功能基本都有,不能和市场上正式游戏相提比论,请理性对待! 在这篇博客中,我们将使用 Python 和 Pygame 库来编写经典的 2048 游戏。2048 是一个益智类游戏,通过在 4x4 网格上滑动方块并合并它们来创建一个新的数字,直到获得数字 2048 或者无法继…

武汉星起航:跨境电商行业领航者,一站式孵化服务引领全球趋势

在全球化日益深入的今天,跨境电商作为连接各国市场的桥梁,其重要性日益凸显。在这一潮流中,武汉星起航电子商务有限公司以其前瞻性的战略眼光和丰富的运营经验,迅速崛起为跨境电商行业的领军者。公司不仅自营亚马逊跨境电商业务&a…