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

news2024/10/1 21:30:50

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

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

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

1、Web端代码

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

function download(id){
	//例如  http://localhost/app/file/download?id=123
	let 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.coloradmin.cn/o/2065766.html

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

相关文章

【计算机组成原理】三、存储系统:3.磁盘存储器(磁盘阵列RAID)

7.磁盘存储器&#xff08;机械&#xff09; 考点&#xff1a;磁盘存取时间的计算 与操作系统有重合&#xff0c;操作系侧重算法管理&#xff0c;计组侧重硬件 计算机的外存储器又称为辅助存储器&#xff0c;目前主要使用磁表面存储器。 所谓“磁表面存储”&#xff0c;是指把某…

等保测评基础:了解等级保护的基本概念

在数字化时代&#xff0c;信息安全已成为企业乃至国家层面不可忽视的议题。等级保护制度&#xff0c;作为我国信息安全保障体系的重要组成部分&#xff0c;旨在通过标准化、等级化的安全管理措施&#xff0c;确保信息系统安全可控。本文旨在为初学者提供等保测评的基础知识&…

Aixos食用指南,超全面详细讲解!

前言&#xff1a;axios是目前最流行的ajax封装库之一&#xff0c;用于很方便地实现ajax请求的发送。特意花费了两个小时为大家准备了一份全面详细的Aixos食用指南&#xff0c;需要的小伙伴点个关注 哦~&#x1f495; &#x1f308;&#x1f308;文章目录 Axios 简介 Axios 特…

Java重修笔记 第三十七天 日期类

第一代日期类&#xff1a;Date 1. 通过 new 一个 Date 对象来获取当前时间 2. 通过 SimpleDateFormat 对象来格式化时间的输出 public class Date01 {public static void main(String[] args) {// 获取系统当前时间Date date01 new Date();System.out.println("当前日…

周边乡村游小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;游客&#xff0c;景点信息管理&#xff0c;景点美食管理&#xff0c;美食类型管理&#xff0c;景点攻略管理&#xff0c;特产信息管理&#xff0c;特产类型管理&#xff0c;系统管理 微信端账号功能包…

猫头虎分享:如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini?

猫头虎分享&#xff1a;如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini&#xff1f; 大家好&#xff0c;我是猫头虎 &#x1f44b;&#xff0c;今天我们要讨论的是在各种场景下如何选择合适的智能助手模型。随着人工智能技术的发展&#xff0c;OpenAI推出了多种型号的GPT…

【C++ Primer Plus习题】2.3

问题: 解答: #include <iostream> using namespace std;void print01() {cout << "三只眼瞎的老鼠" << endl; }void print02() {cout << "看他们怎么跑" << endl; }int main() {print01();print01();print02();print02();r…

EmguCV学习笔记 VB.Net 6.3 轮廓外接多边形

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

聚类分析|距离与相似系数|层次聚类|K均值聚类|SPSS及Matlab

聚类分析问题描述 聚类分析问题描述 人类认识世界的方法之一就是将事物按照各种属性或特征分成若干类别。 物以类聚、人以群分。分类方法多种多样&#xff0c;简单直接的如高、矮、胖瘦。使用的信息量小&#xff0c;但对类别界限附近的案例&#xff0c;分类结果不一定合适。 …

Linux 命令管道介绍

今天给伙伴们分享一下Linux 命令管道&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得到支持和共同进步&am…

软考:软件设计师 — 15.数据结构及算法应用

十五. 数据结构及算法应用 数据结构及算法应用类题目是下午场考试中的第四道题目&#xff0c;分值 15 分&#xff0c;主要以 C 语言填空、算法策略判断和时间复杂度判断为考察形式&#xff0c;建议拿到 6 分以上。 1. 解题技巧 算法策略与时间复杂度部分详细内容可以参考文章…

测试干货 | 如何选择合适的半导体检测方法?看完这篇就明白了!

撰文排版&#xff1a;刘佳 审核指导&#xff1a;肖俊灵 本文较长&#xff0c;建议先收藏后随时查看&#xff01;以后我们将更新更多此类硬核科普&#xff0c;欢迎关注&#xff01; 半导体材料作为半导体产业链中的重要支撑&#xff0c;包括以硅、锗等为代表的元素半导体材料和以…

图与树的基本概念

目录 引言 图与树结构的重要性 图的基本概念 图的表示方式 图的遍历算法 树的基本概念 树的定义与性质 树的遍历 二叉树与多叉树的概念 图与树的高级应用 最短路径算法 最小生成树算法 总结与应用 综合实例分析 引言 在计算机科学的世界中&#xff0c;图和树是两…

商圈停车泊位实时查询与推荐系统 项目编号:17259(案例分享)

摘 要 在当今城市化进程加快的背景下&#xff0c;城市停车问题日益突出&#xff0c;给市民出行带来诸多不便。为解决停车难题&#xff0c;提高停车效率&#xff0c;基于Java开发语言和Spring Boot框架&#xff0c;结合MySQL数据库技术&#xff0c;开发了商圈停车泊位实时查询…

计算机Java项目|基于SpringBoot的网络海鲜市场系统的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

牛客小白月赛96

牛客小白月赛96 A 最少胜利题数 链接&#xff1a;https://ac.nowcoder.com/acm/contest/84528/A 来源&#xff1a;牛客网 题目描述 本场小白月赛共 6 题&#xff0c;&#x1d435;&#x1d456;&#x1d45b;&#x1d454;&#x1d44f;&#x1d45c;&#x1d45b;&#x1d4…

【hot100篇-python刷题记录】【找到字符串中所有字母异位词】

R6-滑动窗口篇 印象题 核心&#xff1a; 使用collections方法的Counter计数&#xff0c;统计了某个子串中每个字母出现的次数。 判断子串相等&#xff1a;counter1counter2 &#xff08;注意&#xff1a;此时&#xff0c;counter1或者counter2都不能含有多余的项&#xff0…

JVM系列--初始JVM

根据《黑马程序员JVM虚拟机入门到实战全套视频教程》整理 1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步…

Mysql 集群技术

一、Mysql 在服务器中的部署方法 在企业中90%的服务器操作系统均为Linux在企业中对于Mysql的安装通常用源码编译的方式来进行官网&#xff1a;http://www.mysql.com 1.1 在Linux下部署mysql cmake \ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \ #指定安装路径 -DMYSQL_DATADI…

【Unity变现】Unity 接入Unity ADS广告

说在前面的话&#xff0c;Unity ADS是Unity官方做的广告变现平台&#xff0c;但广告在我国大陆无法使用&#xff0c;开发时测试的话需要上代理才能看到请求的广告。 如果游戏不准备发布到海外市场&#xff0c;可以不考虑这个平台。 一、注册Unity ADS平台的准备 https://dash…