当前位置: 首页 > news >正文

微信小程序:文件下载

目录

第一步 请求资源

第二步 获取资源后写入到微信本地

获取资源

写入资源(wx.getFileSystemManager)writeFile 的api

第三步 读取资源(openDocument与saveImageToPhotosAlbum)



第一步 请求资源

下面是请求接口中的脚本内容

export let baseUrl = 'http://192.168.78.112:8081';
//获取头部设置
function getHeader({apicode}){//请求和返回消息统一采用json格式。(Content-Type: application/ form-data )采用UTF-8字符编码。let ContentType = "application/json;charset=UTF-8";let token = '';let headers = {['Content-Type']:ContentType,//设置报文格式apicode,//具体接口标识,token,}return headers
}
//基础接口
export function baseRequest(config){let {url,data,request,header,method,responseType} = config;return new Promise((resolve,reject)=>{uni.request({url:`${baseUrl}/${url}`,data,method,header,responseType,success: (res) => {console.log("baseRequest:",res);// let {datagram,_new} = res.data resolve(res)},fail: (err) => {let {errMsg} = err;utils.Toast.showError({title:config})console.error(err);// err = {errMsg: "request:fail "}reject(err);}}); })
}
//组将发送code的接口
export function requestConfig(config){ console.log('requestConfig:',config)//接口id  请求参数  请求方法 return new Promise((resolve,reject)=>{requestBase(config).then((res)=>{let {datagram} = res.dataresolve(datagram) console.log('requestConfig',res)resolve(res)}).catch((err)=>{console.log('接口请求报错err:',err)reject(err)})})
}
//请求业务的接口
export function request(config){ //接口id  请求参数  请求方法  config.url = `wechatservice/perform`return new Promise((resolve,reject)=>{requestConfig(config).then((res)=>{ resolve(res) console.log('request',res)resolve(res)}).catch((err)=>{console.log('接口请求报错err:',err)reject(err)})})
}
//请求下载列表的接口
export function requestFile(config){ //接口id  请求参数  请求方法 config.url = `/wechatservice/file`config.responseType = 'arraybuffer'return new Promise((resolve,reject)=>{requestBase(config).then((res)=>{let {_new} = res.dataresolve({res:res.data ,header:res.header}) console.log('requestFile',res)resolve(res)}).catch((err)=>{console.log('接口请求报错err:',err)reject(err)})})
}

其中资源请求中需要注意的是本接口

//请求下载列表的接口
export function requestFile(config){ //接口id  请求参数  请求方法 config.url = `/wechatservice/file`config.responseType = 'arraybuffer'return new Promise((resolve,reject)=>{requestBase(config).then((res)=>{let {_new} = res.dataresolve({res:res.data ,header:res.header}) console.log('requestFile',res)resolve(res)}).catch((err)=>{console.log('接口请求报错err:',err)reject(err)})})
}

因为服务器返回的是二进制,于是需要把配置返回的数据内容改为arraybuffer

config.responseType = 'arraybuffer'

第二步 获取资源后写入到微信本地

获取资源

onclick(){  let {showLoading,hideLoading} = util.Toastlet fileurl= this.fileurlshowLoading()downloadPDFFileData(fileurl).then((data)=>{console.log('res:',data)// 同步接口try {this.setFile(data)} catch(e) {console.error(e)hideLoading()}}).catch(()=>{hideLoading()})
},

写入资源(wx.getFileSystemManager)writeFile 的api

只有把文件写入本地,才能去处理本地的文件

其中写入文件很重要,地址微信光放提供了一个【wx.env.USER_DATA_PATH】的基础地址,在后面加上自己的就好了

	//写入文件setFile(fileData){// https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.appendFileSync.htmllet  filerRes= fileData.reslet header = fileData.header;let $this = this let  filePath = `${wx.env.USER_DATA_PATH}/${this.filename}`;//写入本地文件console.log('filePath:',filePath);let {hideLoading} = util.Toast;const fs = wx.getFileSystemManager()fs.writeFile({filePath,data: filerRes, success(res) {hideLoading()let fileType = $this.getFileType(header);let txt = fileType == 'txt';//是文本格式let img = $this.imgType.indexOf(fileType)>=0;//是图片let canShow = $this.canShow.indexOf(fileType)>=0;//是能展示的if(txt){//文本}else if(img){//展示图片$this.imageSrc = filePath;}else if(canShow){$this.openDocument(filePath,fileType)}console.log('fileType:',fileType) },fail(res) {hideLoading()console.error(arguments)}})},

第三步 读取资源(openDocument与saveImageToPhotosAlbum)

            //打开指定文档openDocument(filePath,type){uni.openDocument({filePath: filePath,showMenu: true,fileType:type,success: function (res) {console.log('打开文档成功');},fail(res) {console.error(arguments)}});},saveImage(filePath){uni.saveImageToPhotosAlbum({filePath,success(res) { console.log('储存成功')}})},//获取文件类型getFileType(headerInfo){ console.log('headerInfo:',headerInfo)let ContentDisposition = headerInfo['Content-Disposition']let type = ContentDisposition.split('.');let index = type.length-1return type[index]}

相关文章:

微信小程序:文件下载

目录 第一步 请求资源 第二步 获取资源后写入到微信本地 获取资源 写入资源(wx.getFileSystemManager)writeFile 的api 第三步 读取资源(openDocument与saveImageToPhotosAlbum) 第一步 请求资源 下面是请求接口中的脚本内容 export let baseUrl http://192.168.78.112…...

QString和QByteArray的区别

QString和QByteArray的区别 本质格式转换QString字符串格式化打印长度 本质 QString是对QByteArray的再次封装 QString可以通过char*来构造,也可以通过QByteArray来构造 QByteArray就是char* QString是编码后的char* QString也是封装了字符串, 但是内部的编码为utf…...

Vue3 Vite electron 开发桌面程序

Electron是一个跨平台的桌面应用程序开发框架,它允许开发人员使用Web技术(如HTML、CSS和JavaScript)构建桌面应用程序,这些应用程序可以在Windows、macOS和Linux等操作系统上运行。 Electron的核心是Chromium浏览器内核和Node.js…...

【Nodejs】Express模板使用

1.Express脚手架的安装 安装Express脚手架有两种方式: 使用express-generator安装 使用命令行进入项目目录,依次执行: cnpm i -g express-generator可通过express -h查看命令行的指令含义 express -hUsage: express [options] [dir] Optio…...

【iOS】App仿写--管理系统

文章目录 前言一、账号界面二、功能界面三、添加功能四、删除功能五、更改功能六、查找功能七、排序功能八、退出功能总结 前言 在日常生活中,如果用文字来记述与管理我们数据会十分麻烦,并且人工成本较高,这里笔者给出一种管理系统的模版&a…...

JS实现队列的数据结构

创建queue.ts /*** 队列*/ export default class Queue<T> {private items: object;private count: number;private header: number;constructor() {this.items {};this.count this.header 0;}/*** 入队列* param element* returns 当前队列的数量*/enqueue(element:…...

title: 用 LangChain 构建基于资料库的问答机器人(四):通过代理使用外部工具

上一篇教程我们介绍了 ReAct 系统&#xff0c;这是一个非常强大的行为模式&#xff0c;但它需要编写大量的示例来告诉 LLM 如何思考、行动&#xff0c;并且为了遵循这个模式&#xff0c;还需要编写代码来分析生成文字、调用函数、拼接 prompt 等&#xff0c;这些工作都是十分繁…...

使用 CSS 自定义属性

我们常见的网站日夜间模式的变化&#xff0c;其实用到了 css 自定义属性。 CSS 自定义属性&#xff08;也称为 CSS 变量&#xff09;是一种在 CSS 中预定义和使用的变量。它们提供了一种简洁和灵活的方式来通过多个 CSS 规则共享相同的值&#xff0c;使得样式更易于维护和修改。…...

Unity 性能优化一:性能标准、常用工具

性能标准 推荐耗时&#xff1a; 性能提现到玩家直观感受&#xff0c;就是帧率&#xff0c;为了达到要求的帧率&#xff0c;就要控制CPU的耗时&#xff0c;不同类型的游戏&#xff0c;对帧率要求不一样。下面是推荐耗时&#xff1a; 推荐内存&#xff1a; 避免游戏闪退的重点…...

【http长连接+池化】

参考&#xff1a; https://it.cha138.com/ios/show-49862.html http://blog.chinaunix.net/uid-16480950-id-103597.html https://www.cnblogs.com/kevin-yuan/p/13731552.html https://www.jianshu.com/p/17e9aacca438 一、http长连接和短连接 HTTP协议是无状态的协议&#…...

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间&#xff0c;但是该色彩空间过于抽象&#xff0c;我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色&#xff0c;HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间&#xff0c;我们能够更加方便地通过色调、…...

python调用arcgis功能一例

python调用arcgis功能一例 执行方法&#xff1a; D:\data\python>python test_Select.pywindow11下环境变量设置 此电脑/属性/系统/高级系统设置/高级/环境变量/path path中添加全局目录&#xff1a;C:\Python27\ArcGIS10.4 test_Select.py脚本内容 # Name: Select_Examp…...

Spring MVC 是什么?

一、什么是 Spring MVC&#xff1f; 官方对于 Spring MVC 的描述是这样的&#xff1a; Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web …...

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库&#xff1a; chrono 流式查询使用&#xff1a; query_iter 输出到Vec使用&#xff1a; query 映射到结构体使用&#xff1a; query_map 获取单条数据使用&#xff1a; query_first 命名…...

JAVA面试总结-Redis篇章(二)——缓存击穿

JAVA面试总结-Redis篇章&#xff08;二&#xff09; 缓存击穿解决方案一&#xff1a;互斥锁解决方案二&#xff1a;逻辑过期![在这里插入图片描述](https://img-blog.csdnimg.cn/176dfab3e26044a9a730fabea4314e8e.png) 缓存击穿 解决方案一&#xff1a;互斥锁 解决方案二&…...

Spring相关知识点

概述 分层的轻量级的全栈开源框架 展示层SprigMVC 持久层 Spring JDBCTemplate 业务层事务管理 注&#xff1a; 轻量级&#xff1a;API简单 全栈&#xff1a;各层都有相应解决方案 在Spring的体系结构中&#xff0c;由上而下&#xff0c;逐层依赖 Spring相当于是一个粘合剂&…...

Nginx专题--反向代理(未完成)

反向代理   正向代理&#xff1a;如果把局域网外的 Internet 想象成一个巨大的资源库&#xff0c;则局域网中的客户端要访问 Internet&#xff0c;则需要通过代理服务器来访问&#xff0c;这种代理服务就称为正向代理。 反向代理&#xff1a;其实客户端对代理是无感知的&…...

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎&#xff1f;搜索引擎的原理什么是搜索引擎爬取&#xff1f;什么是搜索引擎索引&#xff1f;什么是搜索引擎检索?什么是搜索引擎排序&#xff1f; 搜索引擎的目的是什么&#xff1f;搜索引擎如何赚钱&#xff1f;搜索引擎如何建立索引?网页抓取文本处理建…...

Spring系列一:spring的安装与使用

文章目录 &#x1f49e; 官方资料&#x1f34a;Spring5下载&#x1f34a;文档介绍 &#x1f49e;Spring5&#x1f34a;内容介绍&#x1f34a;重要概念 &#x1f49e;快速入门&#x1f34a;Spring操作演示&#x1f34a;类加载路径&#x1f34a;Debug配置&#x1f34a;Spring容器…...

Ubuntu--科研工具系列

翻译系列 pot-desktop github链接: https://github.com/pot-app/pot-desktop 下载deb Releases pot-app/pot-desktop GitHub 安装过程 在下载好的deb目录下打开终端(自动安装依赖) sudo apt install "XXX.deb" &#xff08;后面可以直接托文件到终端&#…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...