H5项目中使用微信JS-SDK(以H5项目批量上传图片为例,兼容IOS及安卓)

news2025/7/14 1:41:55

H5项目中使用微信图片上传相关sdk,主要用于解决 1.安卓手机无法一次选择多张图片进行上传问题;2.控制IOS系统手机一次可无限量选择图片上传的问题

一、准备工作:公众号配置

  1. 验证所需使用的sdk是否符合需求

可在使用场景中,打开微信官方提供的 微信SDKDemo 链接,或企业微信官方提供的 企业微信SDKDemo 链接。选择相应的接口demo,若符合需求,可进行后续开发,若不符合则需寻找其他方法。

2.配置微信公众号

微信公众平台 需管理员或长期运营者扫码登录,长期运营者,可在人员设置中进行配置

(1)添加js接口安全域名

在公众号设置中配置js接口安全域名,在设置弹窗中添加项目域名,并下载弹窗中超链接的文件,将文件放在前端项目服务器中,放在项目所在的文件夹。注意,JS接口安全域名只能添加5个域名且每月只能编辑5次,操作需要谨慎。

(2)配置IP白名单

开发者密码(AppSecret) 这个数据后台需要用到,若不知道开发者密码,可进行重置后获取。

IP白名单弹窗中添加项目ip地址,若不清楚项目IP可参考 jxjtyedu 公众号的白名单,该公众号配置的IP白名单基本涉及公司所有项目IP。IP白名单数量不限,修改次数不限,但IP不可重复。

二、前端开发

1.安装插件并配置sdk文件

(1)安装 微信SDK插件

npm install weixin-js-sdk

(2)封装wxSdk文件

在utils 文件夹中添加 weChatSdk.ts文件

import wx from'weixin-js-sdk'
import axios from "axios";
import { globalurl } from "./global";
const env = import.meta.env;
let action = ''
switch (env.MODE) {
  case "development":
    action = globalurl.development;
  	break;
  case "test":
  	action = globalurl.test;
  	break;
  case "production":
  	action = globalurl.production;
  	break;
}
const wxconfig = async () =>{
	const url = encodeURIComponent(window.location.href.split('#')[0]);
	axios.get(`${action}print/printCommon/getJsapiInit?url=${url}`).then((result) =>{ // 接口获取配置参数
  	const {data} = result.data
		wx.config({
    	debug: true,// 开启调试模式,调用的所有api的返回值会在客户alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
			appId: data.appId,
			timestamp: data.timeStamp,
			nonceStr: data.nonceStr,
			signature: data.signature,
			jsApiList:[ // 必填,需要使用的JS接口列表
				"chooseImage",
				"getNetworkType",
				"uploadImage",
				"downloadImage",
				"getLocalImgData"
    	]
  	})
	})
}
export default wxconfig;

微信所有js接口列表 地址

(3) 注入权限验证配置

若项目为hash模式,则只需在app.vue文件引入weChatSdk.ts 中wxconfig方法,并在mounted时调用即可在项目任意页面使用微信js接口

若项目为history模式,则推荐在所需使用微信js接口的页面引入wxconfig方法并调用

2.批量上传图片(以下代码暂未测试,请勿使用,近期内会进行测试,测试完成后会再次编辑)

// 选择图片 拍照或从手机相册中选图接口
const chooseImg = (index, type) => {
	wx.ready(() => {
		wx.chooseImage({
			count: 9,// 每次可选图片数量 默认9
			sizeType: ['original",],// 可以指定是原图还是压缩图,默认二者都有
			sourceType: ['album,camera'],// 可以指定来源是相册还是相机,默认二者都有
			success: function (res) {
				let locaIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img的src属性显示图片,但IOS WKWebview 不支持 localId 直接显示图片
				// 获取本地图片 此接口仅在 IOS WKWebview 下提供,用于兼容 IOS wKWebview 不支持 localId 直接显示图片的问题
				localIds.map(item => {
					getLocalImg(item)
      	})
    	}
  	})
	})
}

// 获取本地图片
const getLocalImg = (localId) => {
	wx.ready(() => {
		wx.getLocalImgData({
			localId: localId,// 图片的localID
			success: function (res) [
				let localData = res.localData; // localData是图片的base64数据,可以用 img 标签显示
				// 部分浏览器获取的返回值不是标准的base64格式,判断获取到的图片数据是否有base64头部
				if (localData.indexOf('data:image') != 0) {
					// 判断是否有这样的头部
					localData = 'data:image/jpeg;base64,' + localData
      	}
				localData = localData.replace(/\r/\n/g,).replace('data:image/jgp','data:image/jpeg')
				// 第一个替换的是换行符,第二个替换的是图片类型,因为在IOS机上测试时看到它的图片类型时jgp,为了兼容其他设备就把它转为jpeg
				// 将图片由base64转为binary后上传
				handleUpload(convertFile(localData))
      }
  	})
	})
}

// base64 转binary
const convertFile = base64 => {
	let fileArray = base64.split(','),
  	//过滤出文件类型
  	fileType = fileArray[0].match(/:(.*?);/)[1],
  	//atob 是对经过 base-64 编码的字符串进行解码
  	bstr = atob(fileArray[1]),
  	n = bstr.length,
  	//Uint8Array 数组类型表示一个 8 位无符号整型数组
  	u8arr = new Uint8Array(n)
	while (n--) {
		// 返回字符串n个字符的 Unicode 编码
		u8arr[n] = bstr.charCodeAt(n)
	}
	//return new Blob([u8arr],[ type: fileType 3)
	return new File([u8arr],'文件名',{ type: fileType })
}

// file 上传
const handleUpload = async (file) => {
	// 上传至服务器代码
}

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

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

相关文章

MOS管选型参数:VGS(th)

MOS管选型参数:VGS(th) VGS(th):开启电压(阀值电压)。当外加栅极控制电压 VGS 超过 VGS(th) 时,漏区和源区的表面反型层形成了连接的沟道。应用中,常将漏极短…

如何拥有自己的Gitee代码仓库

本教程适用码云代码托管平台 https://gitee.com/ 首先在电脑上安装Git(哔站有安装Git教程)和注册gitee账号后再来阅读此教程 1、在设置页面中点击 SSH公钥 2、点击 怎样生成公钥 3、点击公钥管理 4、点击 生成\添加SSH公钥 5、打开终端 输入如图红框中的…

MyBatis学习笔记(二) —— 搭建MyBatis项目

2、搭建MyBatis 2.1、开发环境 IDE:idea 2019.2 构建工具:maven 3.5.4 MySQL版本:MySQL 8 MyBatis版本:MyBatis 3.5.7 MySQL不同版本的注意事项 1、驱动类 driver-class-name MySQL 5版本使用jdbc5驱动,驱动类使用…

【人工智能 AI】Robotic Process Automation (RPA) 机器人流程自动化 (RPA)

目录 ROBOTIC PROCESS AUTOMATION SERVICES机器人流程自动化服务 What is RPA? 什么是机器人流程自动化?

【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(三)

storybook插件addons核心插件插件APIargTypes写文档组件注释法MDX生成在线可视化UI文档上一篇: https://blog.csdn.net/tuzi007a/article/details/129194267插件addons 插件用于增强storybook的UI功能。 核心插件 storybook/addon-essentials 它几乎控制了整个s…

Java实现阴历日历表(附带星座)

准备工作 1.无敌外挂(GitHub直达源码) Nobb 直击灵魂 https://github.com/xuyishanBD/Java_create_calendar.git2.maven配置(如果没有走上面的捷径) <dependencies><dependency><groupId>net.sourceforge.javacsv</groupId><artifactId>javac…

Pytorch从零开始训练模型【识别数字模型】并测试

1 准备数据集 import torch import torchvision # 去网上下载CIFAR10数据集【此数据集为经典的图像数字识别数据集】 # train True 代表取其中得训练数据集&#xff1b; # transform 参数代表将图像转换为Tensor形式 # download 为True时会去网上下载数据集到指定路径【root】…

用Python获取弹幕的两种方式(一种简单但量少,另一量大管饱)

前言 弹幕可以给观众一种“实时互动”的错觉&#xff0c;虽然不同弹幕的发送时间有所区别&#xff0c;但是其只会在视频中特定的一个时间点出现&#xff0c;因此在相同时刻发送的弹幕基本上也具有相同的主题&#xff0c;在参与评论时就会有与其他观众同时评论的错觉。 在国内…

零基础想转行学习Python,该如何学习,有学习路线分享吗?(2023年给初学者的建议)

Python属于一种面向对象、解释性的高级语言&#xff0c;它如今在众多领域都被应用&#xff0c;包括操作系统管理、Web开发、服务器运维的自动化脚本、科学计算、桌面软件、服务器软件(网络软件)、游戏等方面&#xff0c;且Python在今后将被大规模地应用到大数据和人工智能方面。…

MPI编程size总为1 解决方案

之前遇到的问题在这儿mpi编程 comm.Get_rank()全为0而comm.Get_size()全为1应该怎么办&#xff1f;_wennyLee的博客-CSDN博客 后来&#xff0c;我尝试了在pycharm的terminal中运行程序 mpiexec -n 4 test.py 但是又出现了新的问题↓ 然后为了解决”不是有效的 Win32 应用程序…

前端白屏的检测方案,让你知道自己的页面白了

前言 页面白屏&#xff0c;绝对是让前端开发者最为胆寒的事情&#xff0c;特别是随着 SPA 项目的盛行&#xff0c;前端白屏的情况变得更为复杂且棘手起来&#xff08; 这里的白屏是指页面一直处于白屏状态 &#xff09; 要是能检测到页面白屏就太棒了&#xff0c;开发者谁都不…

线性数据结构:链表 LinkList

一、前言 链表的历史 于1955-1956年&#xff0c;由兰德公司的Allen Newell、Cliff Shaw和Herbert A. Simon开发了链表&#xff0c;作为他们的信息处理语言的主要数据结构。链表的另一个早期出现是由 Hans Peter Luhn 在 1953 年 1 月编写的IBM内部备忘录建议在链式哈希表中使…

推荐使用什么样的平台表单制作工具好?

在办公自动化迅猛发展的今天&#xff0c;传统的表单制作工具已经不能满足各行各业的生产需求&#xff0c;引用专业的低代码开发平台表单制作工具可以助力企业提高作业协作效率。那么&#xff0c;什么平台的表单制作工具可以实现这一目的&#xff1f;今天&#xff0c;我们就一起…

月薪过3W的软件测试工程师,都是怎么做到的?

对任何职业而言&#xff0c;薪资始终都会是众多追求的重要部分。前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;目前软件测试行业“缺口”已经基本饱和。当然&#xff0c;我说的是最基础的功能测试的岗位…

用规则来搭建团队:写周报不一定是坏事

你好&#xff0c;我是Smile&#xff0c;一位有二十年工作经验的技术专家。今天我会结合我的经历&#xff0c;和你聊聊搭建技术团队这个话题。 众所周知&#xff0c;技术团队很大程度上决定了一个公司业务的生命力和生命周期&#xff0c;因此技术团队的投入成本往往很高&#x…

快到金3银4了,准备跳槽的可以看看

前两天跟朋友感慨&#xff0c;今年的铜九铁十、裁员、疫情导致好多人都没拿到offer!现在已经12月了&#xff0c;具体明年的金三银四只剩下两个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

百度Q4:亮剑AI,重塑金身

2月22日港股盘后&#xff0c;港交所最纯正的AI概念股百度发布了2022年第四季度以及全年的业绩报告&#xff0c;在新冠疫情冲击宏观经济的第四季度&#xff0c;百度经营利润、经营利润率也均实现同比增长。 凭借在AI领域的长期投入&#xff0c;尽管有疫情侵扰、外部环境所带来的…

HACKTHEBOX——Curling

nmap还是老规矩&#xff0c;先扫描目标对外开放端口情况&#xff0c;只发现了22和80端口对外开启nmap -sV -sC -oA nmap 10.10.10.150http80端口对外开启&#xff0c;从扫描结果来看好像运行着Joomla&#xff0c;所以先访问看看&#xff0c;可以看到帖子由super user撰写&#…

教你用反射机制如何几分钟搭建完后端

如果想快速搭建后台跨域使用这些技术 反射mybatis-plusjson 反射可以实现动态数据的传输 一般对数据库进行操作肯定离不开这些代码 如果我们用反射机制只需要这一个就行 而说到反射的好处&#xff0c;一般情况下我们做增删改查需要大量的接口才能完成&#xff0c;而用反射我…

2023如果纯做业务测试的话,在测试行业有出路吗?

直接抛出我的结论&#xff1a;手工做业务类测试&#xff0c;没有前途。 个人建议赶紧从业务测试跳出来&#xff0c;立即学习代码&#xff0c;走自动化测试方向。目前趋势&#xff0c;业务测试需要用自动化做。 为了让大家能够信服我的观点&#xff0c;本文将从以下方面进行阐…