微信H5下载文件、微信浏览器无法下载文件解决方案

手机端的微信访问网页的时候,是禁止直接下载文件的

但是IOS端可以预览.txt/.doc/.docx/.xls/xlsx/.pdf等格式的文件,Android端在下载这些格式的文件时,可以唤起 ‘即将离开微信,在浏览器打开’ 提示
在这里插入图片描述
所以,根据手机微信的这些限制,考虑在下载文件时,使Android微信在下载任何格式的文件时,都可以唤起提示,以打开浏览器下载文件

请求controller时,根据request的header判断是什么浏览器,在根据浏览器类型返回不一样的值;这样在微信内会请求一次,返回txt文件,就能唤起浏览器内打开,再浏览器打开的时候这个链接会再被请求一次,返回的就是对的文件了;

1、Web端代码

推荐以跳转的方式实现(注意:离开微信在浏览器打开时,链接地址不会被修改)

function download(id){//例如  http://localhost/app/file/download?id=123let url = BASEURL +'/file/download?id='+ id;window.location.href = url
}

2、java代码

java程序中判断客户端的浏览器信息,来判断是否为手机微信和是否Android微信
这里使用 JFinal

	public void download() throws IOException {String id = getPara("id", "");if(StringUtils.isNotBlank(id)){Record fileRec = Db.findById("file_upload", id);//微信端返回一个默认假文件,使得唤起微信的‘在浏览器打开’if(isAndroidWechat(getRequest())){File file = new File("a.txt");if(!file.exists())file.createNewFile();renderFile(file);}else{renderFile(new File(fileRec.getStr("save_path")), fileRec.getStr("file_name"));}}else{renderJson(err());}}/*** 客户端是否是Android微信浏览器* @param request* @return*/public static boolean isAndroidWechat(HttpServletRequest request) {String userAgent = request.getHeader("user-agent");return userAgent != null && userAgent.toLowerCase().indexOf("micromessenger") > -1&& userAgent.toLowerCase().indexOf("wxwork") < 0&& userAgent.toLowerCase().indexOf("android") > -1;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410797.html

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

相关文章

redis面试(二十四)Semaphore锁实现

Semaphore也是redis分布式锁支持的一种&#xff0c;同步组件 之前给大家的讲解的锁&#xff0c;基本上都是同时间只能一个客户端获取这个锁&#xff0c;然后做一些事情&#xff0c;处理完了以后释放锁 Semaphore&#xff0c;信号量&#xff0c;他作为一个锁机制&#xff0c;可以…

java-Mybatis框架02

1.#{} 和${}区别 #{} 是占位符&#xff0c;是采用编译方式向sql中传值&#xff0c;可以防止sql注入&#xff0c;如果往sql中传值&#xff0c;使用#{}${} 是将内容直接拼接到sql语句中&#xff0c;一般不用于向sql中传值&#xff0c;一般用于向sql中动态传递列名。区别&#xff…

OpenCV绘图函数(6)绘制椭圆函数ellipse()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 画出一个简单的或粗的椭圆弧或者填充一个椭圆扇形。 函数 cv::ellipse 使用更多的参数可以画出椭圆轮廓、填充的椭圆、椭圆弧或填充的椭圆扇形。…

ISO 26262中的失效率计算:SN 29500-3 Expected values for discrete semiconductors

目录 概要 1 基准条件下的失效率 2 失效率转换 2.1 失效率预测模型 2.2 电压应力系数 2.2.1 电压应力系数计算模型 2.2.2 电压应力系数计算 2.3 温度应力系数 2.3.1 温度应力系数计算模型 2.3.2 温度应力系数计算 2.4 漂移灵敏度系数 3 任务剖面应力系数 4 早期失…

【STM32】时钟体系

一、时钟体系 为什么需要时钟&#xff1f; 时钟可以为系统提供精确的定时&#xff0c;比如时间显示&#xff0c;定时器&#xff0c;pwm… 为芯片各功能模块提供工作势能,使能各组管脚工作&#xff0c;如果不使能&#xff0c;管脚无法工作 同步数据传输 给单片机提供一个时…

【使用 Python 进行截图的两种方法】

在 Python 中&#xff0c;可以使用 pyautogui 和 Pillow 进行截图 使用 pyautogui 进行截图时&#xff0c;其提供了方便的函数。例如&#xff0c;使用 pyautogui.screenshot() 函数可以获取整个屏幕的截图&#xff0c;该函数返回一个包含屏幕截图的图像对象。如果不想截取整个…

齐护【百度AI对话】编程系统文心一言大语音模型对话ESP32图形化Mixly编程Scratch编程Arduino

齐护【百度AI对话】编程系统 一、前言 ​ 在这个日新月异的时代&#xff0c;AI的触角已延伸至互联网、金融、医疗、教育等每一个角落&#xff0c;其影响力不容忽视。从日常中的智能推荐到医疗前沿的精准诊断&#xff0c;从定制化教育到智能化的投资策略&#xff0c;AI正以前所…

Xilinx高速接口之GTP

简介 开坑计划中&#xff0c;主要参考ug482 主要讲解结构以及原语 以及时钟路由和一些其他的 GTP_COMMON还好&#xff0c;需要设置的不多&#xff0c;原语也短&#xff0c; GTP_CHANNEL需要设置的东西真多&#xff0c;原语也长 还好有官方参考例程以及自动生成的原语例化 不然…

PDF文件的读取与合并:使用PyPDF2与ReportLab

目录 一、PyPDF2库基础 1.1 PyPDF2简介 1.2 安装PyPDF2 1.3 读取PDF内容 1.4 合并PDF文件 二、ReportLab库基础 2.1 ReportLab简介 2.2 安装ReportLab 2.3 使用ReportLab生成PDF文本 2.4 ReportLab 与 PyPDF2 结合使用 三、注意事项与最佳实践 3.1 文本提取的局限性…

【Linux】初步识操作系统

linux专栏&#xff1a;《Linux入门系列》 系列文章&#xff1a;gdb-调试器初入门&#xff08;简单版使用&#xff09; 编辑器vim入门&#xff08;概念模式转换技巧&#xff09; 目录 1. 概念 2. 设计操作系统的目的 3. 定位&#xff1a;操作系统负责管理 4. 如何理解管理 …

科研绘图系列:R语言单细胞差异基因四分图(Quad plot)

介绍 在单细胞分析领域,为了探究不同分组间同一细胞类型的基因表达差异,研究者们常采用四分图(Quad Plot)作为分析工具。该图形的横轴代表比较组1,而纵轴代表比较组2。通过这种布局,四分图能够有效地展示两组间共有的差异表达基因,从而为深入理解细胞类型在不同条件下的…

Android 突破边界:解密google Partner机制获取Resource

在 Android 应用开发中&#xff0c;除了可以查找系统中的特定 APK 并获取其信息外&#xff0c;还可以通过 Partner 机制获取 Partner APK 的资源文件&#xff0c;同时这种机制也是一种跨进程的通信方式。本文将进一步探讨这些内容。 1.Partner apk注册特定的action广播 /** M…

优雅实现远程调用-OpenFeign

目录 OpenFeign介绍 OpenFeign最佳实践 我再来遇到个问题&#xff0c;我创建的com.xx.xxx包&#xff0c;放到一起了&#xff0c;不是那种一个在一个下面的那种 Nacos&#xff0c;只要看见这种什么网络报错啥的&#xff0c;java.net.SocketException: Network is unreachabl…

Vatee万腾平台:打造企业智能化转型的坚实后盾

在当今这个日新月异的数字化时代&#xff0c;企业智能化转型已成为不可逆转的趋势。面对激烈的市场竞争和快速变化的市场需求&#xff0c;如何高效、稳定地完成这一转型&#xff0c;成为众多企业亟需解决的问题。而Vatee万腾平台&#xff0c;正是这样一位引领企业智能化转型的坚…

MATLAB进阶:应用微积分

今天我们继续学习matlab中的应用微积分 求导&#xff08;微分&#xff09; 1、数值微分 n维向量x(xi&#xff0c;x,… x)的差分定义为n-1维向量△x(X2-X1&#xff0c;X3-X2&#xff0c;…&#xff0c;Xn- Xn-1)。 diff(x) 如果x是向量&#xff0c;返回向量x的差分如果x是矩…

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数&#xff0c;用于对图像进行均值模糊处理。这个函数通…

webserver.h详解

webserver.h头文件 成员变量&#xff1a; 目的是提供一个完整的Web服务器框架&#xff0c;包括网络监听、事件处理、数据库连接管理、线程池管理等功能。 #ifndef WEBSERVER_H #define WEBSERVER_H#include <sys/socket.h> #include <netinet/in.h> #include <…

算法学习-基础数据结构

基础数据结构 一.栈 1.普通栈 套路&#xff1a;从前往后遍历 需要考虑相邻元素 有消除操作 栈。 2.单调栈 二.队列 1.普通队列 2.优先队列 三.Trie 使用场景&#xff1a;可以求某个字符串在众多字符串中出现的次数&#xff0c;以某个字符串为前缀出现的次数 Trie中…

一. 初始 Spring Boot

一. 初始 Spring Boot 文章目录 一. 初始 Spring Boot1. Spring Boot 是什么&#xff1f;2. Spring Boot 官方文档地址3. 第一个 Spring Boot 程序3.1 我的环境工具配置 4. 第一个 SpringBoot 程序解释说明5. Spring&#xff0c;SpringMVC&#xff0c; SpringBoot 三者的关系6.…

Linux中的常见命令——用户管理命令

1、useradd添加新用户 基本语法 语法功能描述useradd 用户名添加新用户useradd -g 组名 用户名添加新用户到某个组 实操案例 1、添加一个新用户【此时的用户是没有密码的】 [rootcentos100 ~]# cd /home [rootcentos100 home]# ls www zss [rootcentos100 home]# useradd…