跨平台Office文档预览原生插件,非腾讯X5,支持离线,稳定高可用

引言

2023年4月13日零时起,腾讯浏览服务内核文档能力正式下线,要实现真正离线文档预览,于是有了这边文章。

前面写了多篇关于<跨平台文件在线预览解决方案>,不管使用pdf.js、LibreOffice,还是永中DCS,各自都有自己的优缺点,比如:pdf.js不支持双指放大缩小,LibreOffice加载缓慢,永中DCS收费等等。

  • 跨平台(uni-app)文件在线预览解决方案
  • 跨平台文件在线预览解决方案(二)
  • 跨平台文件在线预览解决方案(三)- LibreOffice vs OpenOffice
  • 跨平台文件在线预览解决方案(四)-Android和IOS原生插件
  • 跨平台文档在线预览解决方案(五)-水印、防复制、在线编辑等

本文基于uni-app平台实现了Office文档在线预览原生插件Seal-OfficeOnline,同时支持Android和iOS,欢迎下载使用~,

另外单独抽离了图片预览和视频播放原生插件:Seal-ImageVideo,根据自己情况,选择使用~,Seal-ImageVideo插件下载使用地址,另附Github文档地址

Seal-OfficeOnline插件下载使用地址

各位同学,对于插件使用还有疑问的,可以加QQ群(170683293)咨询。

一、注意事项

二、问题解决

问题一:

插件安装成功,但是文档预览失败。

解决方案:检查文档url或参数中是否含有中文字符串,如果有,请使用encodeURIComponentencodeURI进行转码。

如果参数有http://链接,使用encodeURIComponent;如果要对整个url进行转码,使用encodeURI

encodeURIComponent和encodeURI区别

它们都是编码URL,唯一区别就是编码的字符范围,其中

encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+’

encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()’

所以encodeURIComponent比encodeURI编码的范围更大。

各位同学,对于插件使用还有疑问的,可以加QQ群(170683293)咨询。

三、快速上手

demo工程地址 或在右上角直接下载示例工程

开发工具:HBuilderX

Step1. 下载demo工程,使用HBuilderX打开

Step2. 添加本文插件

插件名称:Seal-OfficeOnline

点击右上角试用或者购买,选择你的云打包插件

Step3. 选择manifest.json->App原生插件配置中加载云端插件

Step4. 使用插件

  • 在vue或nvue组件中,导入插件
const sealOfficeOnlineModule = uni.requireNativePlugin("Seal-OfficeOnline")
  • openFile方法(推荐):支持Android和IOS,预览Office文件,支持如下格式:pdf、txt、doc、docx、xls、xlsx、ppt、pptx、epub等近50种类型文件。
  • openFileWPS方法(推荐):采用本机WPS客户端预览或编辑文档,支持pdf、txt、doc、xls、ppt等多种文件格式。
  • checkWps方法:检查本机WPS客户端是否已经安装。
  • openFileImage方法:仅支持IOS,预览图片,支持如下格式:jpg、jpeg、png、bmp、jpg、gif等,参数同openFile方法

接口使用方法,参考如下章节《四、使用方法》

Step5. 调试

  • 制作自定义调试基座:在开发工具中点击“运行到手机或模拟器-》制作自定义调试基座”
  • 选择自定义调试基座:然后“运行到手机或模拟器-》基座运行选择-》自定义调试基座”
  • 连接真机,运行到手机或模拟器-》运行到Android App基座,进行运行调试

四、使用方法

1、离线文档预览,非腾讯TBS,摆脱内核加载困扰,支持在线文档URL

使用接口:openFIle,参数参考章节《五、openFile接口参数说明》

离线文档预览,非腾讯TBS,无内核加载,摆脱腾讯X5内核加载失败的困扰。

同时支持在线文档URL或设备本地文档绝对路径。

两种使用方式,一,直接传递文档在线URL,二,先下载到设备本地,传递绝对路径,参考一下代码。

注意:添加参数isDeleteFile: false,否则退出预览,文件删除。

支持平台:Android、IOS

/**
* 打开文档,非腾讯TBS,无内核加载,真正离线
* @param {Object} fileUrl 文档url
*/
openFile(fileUrl) {
  // 方式一:直接传递文件在线url
  sealOfficeOnlineModule.openFile(
    {
      url: fileUrl, // 同时支持在线和本地文档,三种参数传递方式,具体查看文档说明
      // fileType: 'pdf',
      // fileName: 'example',
      title: 'Office文档在线预览', // 顶栏标题,默认为:APP名称
      topBarBgColor: '#3394EC', // 顶栏背景颜色,默认为:#3394EC(科技蓝)
      waterMarkText: '你好,世界\n准备好了吗?时刻准备着', // 水印文本
      docRequestHeaders: {
        'Authorization': 'Token xxxxxxxx',
        'Other': 'other'
      }, // 文档下载请求头
      isDeleteFile: false,
      topBarAutoHide: true,
      isTopBar: true,
    },
    res => {
      this.printInfo('打开在线文档事件结果:', res);
    }
  );

  // 方式二:先下载文件保存到手机目录,再获取文件绝对路径
  // uni.showLoading({
  // 	title: '正在下载文件,请稍后~'
  // });
  // uni.downloadFile({
  // 	url: fileUrl,
  // 	success: res => {
  // 		if (res.statusCode === 200) {
  // 			// 直接传递本地文件地址
  // 			// 传递本地文件绝对路径,res.tempFilePath的前缀是_doc,而实际目录为doc,没有下划线_,所以要substr取子串
  // 			// const url = '/storage/sdcard0/Android/data/APP包名/apps/APPID/' + res.tempFilePath.substr(1)
  // 			// 可以通过以下方式获取文件绝对路径
  // 			uni.saveFile({
  // 				// 需要保存文件的临时路径
  // 				tempFilePath: res.tempFilePath,
  // 				success: resSave => {
  // 					uni.hideLoading();
  // 					const savedFilePath = resSave.savedFilePath;
  // 					// 转换为绝对路径
  // 					const url = plus.io.convertLocalFileSystemURL(savedFilePath);
  // 					console.log('tempFilePath', res.tempFilePath);
  // 					console.log('savedFilePath', savedFilePath);
  // 					console.log('url', url);
  // 					// 预览本地文件
  // 					sealOfficeOnlineModule.openFile(
  // 						{
  // 							url: url,
  // 							isDeleteFile: false
  // 						},
  // 						res => {
  // 							this.printInfo('打开本地文档事件结果:', res);
  // 						}
  // 					);
  // 				}
  // 			});
  // 		}
  // 	}
  // });
},

2、组件嵌入预览

组件名:Seal-OfficeOnline

组件嵌入预览,是采用nvue原生组件的方式,嵌入页面预览,用于页面的局部文档预览。

在线文档URL和离线设备文档均可预览,也支持自定义水印。

注意:要采用nvue原生组件方式,不可以采用vue组件方式。

支持平台:Android、IOS

新建组件:seal-officeonline-component.nvue

<template>
	<div><Seal-OfficeOnline :options="options" style="width:600rpx;height:800rpx;border: 1px solid red;"></Seal-OfficeOnline></div>
</template>

<script>
export default {
	data() {
		return {
			options: {}
		}
	},
	onLoad(params) {
		console.log('params', params)
		this.options = {
			// 文档预览,传递url
			url: params.url,
			waterMarkText: '你好,世界\n准备好了吗?时刻准备着',
		}
	}
};
</script>

3、WPS预览或编辑文档

使用接口:openFileWPS,参数参考《六、openFileWPS接口参数说明》

WPS预览或编辑文档,是采用本机WPS客户端预览或编辑文档,支持pdf、txt、doc、xls、ppt等多种文件格式。

支持5种模式,包括文档编辑。前提,本地需要安装WPS客户端。

支持平台:Android、IOS(分享功能,第三方APP打开)

/**
* WPS预览或编辑文档
* @param {String} fileUrl 文档url
* @param {String} openMode 打开模式
* openMode取值:
* Normal:正常模式,正常打开,WPS默认打开方式
* ReadOnly:只读模式,以只读的方式打开,WPS会隐藏编辑按钮
* EditMode:编辑模式,可对文档进行编辑
* ReadMode:阅读器模式,支持左右翻页,仅Word、TXT文档支持
* SaveOnly:另存模式(打开文件,另存,关闭),仅Word、TXT文档支持
*/
openOnlineFileWPS(fileUrl, openMode) {
    sealOfficeOnlineModule.openFileWPS(
        {
            url: fileUrl,
            openMode
        },
        res => {
            uni.showModal({
                content: 'WPS打开文档事件结果:' + JSON.stringify(res)
            });
        }
    );
},

4、检查本机是否安装WPS客户端

4.1、方法一(推荐)、使用原生接口:checkWps,无参数。

注意:返回结果格式:{ “hasWps”: true }

支持平台:Android、IOS

注意:IOS配置应用访问白名单:manifest.json—》App常用其他设置—》IOS设置—》应用访问白名单,

添加:KingsoftOfficeApp,KingsoftOfficeAppEnterprise,WPSOfficeApi

应用访问白名单
/**
* 检查WPS客户端是否已经安装
* 返回结果:{ "hasWps": true }
*/
checkWps() {
    const checkWps = sealOfficeOnlineModule.checkWps();
    console.log('checkWps', checkWps);
    uni.showModal({
        content: 'WPS是否安装:' + JSON.stringify(checkWps)
    });
},
4.2、方法二、直接调用plus.runtime.isApplicationExist

参考链接:https://www.cnblogs.com/goloving/p/14384105.html

// 判断第三方程序(WPS) 是否安装
function checkApp() {
    if (plus.runtime.isApplicationExist({pname:'cn.wps.moffice_eng', action:'KingsoftOfficeApp://'})) {
      console.log("WPS应用已安装");
    } else {
      console.log("WPS应用未安装");
    }
}

5、图片预览

使用接口:openFile(Android)、openFileImage(IOS)

支持平台:Android、IOS

/**
* 图片预览,支持jpg、jpeg、png、bmp、jpg、gif等多种常用图片格式
* 图片可以来源于列表或九宫格,传递给imageUrls数组
* @param {Object} fileUrl 图片url
* @param {Object} imageCurrentIndex 当前图片位置下标,从0开始
*/
openImage(fileUrl, imageCurrentIndex) {
    if (this.platform === 'android') {
        // Android
        sealOfficeOnlineModule.openFile({
            imageUrls: this.imageList,
            imageCurrentIndex, // 当前点击图片在imageUrls中的下标,从0开始,默认为0
            imageIndexType: 'number', // 图片底部指示器类型,默认为'dot',可选:'number':数字;'dot':点
            isSaveImg: true, // 是否长按保存图片
        });
    } else if (this.platform === 'ios') {
        // IOS
        sealOfficeOnlineModule.openFileImage(
            {
                url: fileUrl, // 同时支持在线和本地文档,三种参数传递方式,具体查看文档说明
                title: 'IOS图片预览', // 顶栏标题,默认为:APP名称
                topBarBgColor: '#3394EC' // 顶栏背景颜色,默认为:#3394EC(科技蓝)
            },
            res => {
                uni.showModal({
                    content: 'IOS图片预览事件结果:' + JSON.stringify(res)
                });
            }
        );
    }
},

6、视频播放

使用接口:openFile

支持平台:Android、IOS

/**
* 视频播放,支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式
* 功能包括:全屏播放、锁屏、分享、画面比例调节、左边上下滑动调节亮度,右边上下滑动调节音量等
* 支持Android和IOS
* @param {Object} fileUrl 视频url
*/
openVideo(fileUrl) {
    sealOfficeOnlineModule.openFile(
        {
            videoUrl: fileUrl, // 视频在线url,此参数优先于图片预览和文档预览
            installOfflineCore: true, // 是否离线安装内核
            coreLocalPath: this.coreLocalPath // 离线安装内核本地路径
        },
        res => {
            uni.showModal({
                content: '播放视频事件结果:' + JSON.stringify(res)
            });
        }
    );
}

五、openFile接口参数说明

支持打开在线文档,本地文档

支持平台:Android、IOS

参数名说明类型是否必填默认值可选值
url支持如下三种地址方式:
(1)文件网络地址,如:http://113.62.127.199:8090/fileUpload/1.xlsx
(2)手机本地文件地址,如:/data/user/0/APP包名/files/1.xlsx 文件名,如:1.xlsx,
(3)访问默认目录文件,默认目录为:/data/user/0/APP包名,如:com.HBuilder.UniPlugin
注意:手机本地地址目录需要有权限访问
IOS端只支持在线地址
string
docRequestHeaders文档下载请求头,如:
{ ‘Authorization’: ‘Token xxxxxxxx’, ‘Other’: ‘other’ }
IOS端无此配置
object
fileType可以指定文件类型,如:xlsx,在url参数无法判断文件类型时,可以指定文件类型string
fileName指定文件名,如:file1,注意此处不带文件扩展名,如果同时指定fileName和fileType,那么最后的文件名通过这两个参数组合起来,即:fileName.fileTypestring
isDeleteFile退出是否删除缓存的文件,IOS端无此配置booltruefalse
initTitle初始化插件动画标题,IOS端无此配置string插件初始化
initBody初始化插件动画内容,IOS端无此配置string加载中…
docDownloadTitle文档下载进度框标题,IOS端无此配置string加载文档
docDownloadBody文档下载进度框内容,IOS端无此配置string请稍后…
waterMarkText水印文本,默认以**\n**作为分隔符换行stringnull
waterMarkTextSep水印文本分隔符,注意:IOS端只支持\n换行string\n
waterMarkFontSize水印字体大小,单位为sp
使用sp作为字体大小单位,会随着系统的字体大小改变
int13
waterMarkFontColor水印字体颜色string#40F3F5F9
waterMarkDegree水印旋转角度,IOS端无此配置string-30(逆时针30度)
isTopBar是否显示顶栏,IOS端无此配置booltruefalse
title顶栏标题,isTopBar为true时有效stringAPP名称
topBarAutoHide顶栏是否自动隐藏,isTopBar=true时生效,IOS端无此配置boolfalsetrue
topBarHeight顶栏自定义高度,isTopBar为true时有效,类型为正整数,IOS端无此配置intactionBarSize
topBarBgColor顶栏背景颜色,isTopBar为true时有效string#3394EC(科技蓝)
topBarTextColor顶栏文本颜色(isTopBar为true时有效)string#FFFFFF(白色)
topBarTextLength顶栏标题文字长度(isTopBar为true时有效),IOS端无此配置int12
isBackArrow是否显示返回按钮(isTopBar为true时有效),IOS端无此配置booltruefalse
videoUrl视频在线url,此参数优先于图片预览和文档预览string
imageUrls图片url数组,此参数优先于文档预览;长按图片底部弹出保存图片菜单,保存图片至相册,IOS端无此配置array
imageCurrentIndex当前点击图片在imageUrls中的下标,从0开始,IOS端无此配置int0
imageIndexType图片底部指示器类型,IOS端无此配置string‘dot’‘number’:数字;‘dot’:点
isSaveImg是否长按保存图片,IOS端无此配置boolnulltrue/false
canScreenshot是否可以截屏,3.0.1版本以上支持IOS端无此配置booltrue(可以截屏)false(禁止截屏)

六、openFileWPS接口参数说明

本机WPS客户端预览或编辑文档

支持平台:Android、IOS(分享功能,第三方APP打开)

参数名说明类型是否必填默认值可选值
url支持如下三种地址方式:
(1)文件网络地址,如:http://113.62.127.199:8090/fileUpload/1.xlsx
(2)手机本地文件地址,如:/data/user/0/APP包名/files/1.xlsx 文件名,如:1.xlsx,
(3)访问默认目录文件,默认目录为:/data/user/0/APP包名,如:com.HBuilder.UniPlugin
注意:手机本地地址目录需要有权限访问
IOS端只支持在线地址
string
fileType可以指定文件类型,如:xlsx,在url参数无法判断文件类型时,可以指定文件类型,IOS端无此配置string
fileName指定文件名,如:file1,注意此处不带文件扩展名,如果同时指定fileName和fileType,那么最后的文件名通过这两个参数组合起来,即:fileName.fileType,IOS端无此配置string
docDownloadTitle文档下载进度框标题,IOS端无此配置string加载文档
docDownloadBody文档下载进度框内容,IOS端无此配置string请稍后…
openMode打开模式:
* Normal:正常模式,正常打开,WPS默认打开方式
* ReadOnly:只读模式,以只读的方式打开,WPS会隐藏编辑按钮
* EditMode:编辑模式,可对文档进行编辑
* ReadMode:阅读器模式,支持左右翻页,仅Word、TXT文档支持
* SaveOnly:另存模式(打开文件,另存,关闭),仅Word、TXT文档支持
stringNormal见说明

另,openMode打开模式说明:

打开模式说明
Normal正常模式,正常打开,WPS默认打开方式
ReadOnly只读模式,以只读的方式打开,WPS会隐藏编辑按钮
EditMode编辑模式,可对文档进行编辑
ReadMode阅读器模式,支持左右翻页,仅Word、TXT文档支持
SaveOnly(不常用)另存模式(打开文件,另存,关闭),仅Word、TXT文档支持

七、回调结果

1、回调结果格式:

// openFile、OpenFileBS接口
{
    "code": 200,
    "msg": "文档预览成功",
    "result": {
        // 本地文件名
        "fileName": "test.docx",
        // 本地文件路径,前提,参数isDeleteFile=false,否则预览预览结束,本地文件被删除
        "filePath": "/storage/sdcard0/Android/data/com.seal.uniplugin/files/file/test.docx"
    }
}

// OpenFileWPS接口
{
    "code": 1021,
    "msg": "WPS动作事件",
    "result": {
        // 本地文件名
        "fileName": "test.docx",
        // 本地文件路径,前提,参数isDeleteFile=false,否则预览预览结束,本地文件被删除
        "filePath": "/storage/sdcard0/Android/data/com.seal.uniplugin/files/file/test.docx",
        // WPS动作类型:back,返回键;home,Home键;save,保存文件;close,关闭文件
        "actionType": "back",
        // 文件另存为本机路径
        "fileSavePath": "/storage/sdcard0/Android/Download/test2.docx"
    }
}

2、回调结果状态码说明:

状态码说明
200文档预览成功
301文档下载失败
302内核下载失败,自动重新下载
303内核安装失败,自动重新安装
304内核加载失败,可忽略该错误
305内核下载失败,可忽略该错误
1001文档下载成功
1002开始初始化内核
1003开始离线安装内核
1004开始在线安装内核
1005内核下载成功
1006内核安装成功
1007内核初始化成功
1008缓存文档删除成功
1021WPS动作事件

3、WPS动作事件类型actionType说明

支持平台:Android

动作类型说明
back返回键
homeHome键
save保存文件
close关闭文件

八、后续计划

  • 添加水印
  • 支持小窗口模式
  • 支持右上角自定义菜单
  • 支持当前页面回调

九、Android预览效果

预览docx

预览pptx

预览xlsx

预览pdf

预览txt

iOS预览效果

预览docx

预览pptx

预览xlsx

预览pdf

预览txt

转载请注明:我的技术分享 » 跨平台文件在线预览解决方案(四)-Android和IOS原生插件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单列文本数据快速导入表格

文本数据导入Excel似乎是个老生常谈&#xff0c;方法也有很多&#xff0c;例如 使用文本编辑器打开文本文件&#xff0c;拷贝粘贴到Excel然后分类Power Query中的【从文本/CSV】如下图所示。 但是这个需求略有不同&#xff0c;文本数据为单列&#xff0c;每7行数据为一组&am…

MYSQL-数据库管理(下)

查看数据库信息 show database 查看数据库中的表信息 use 数据库名 #切换到书库中 show tables show tables in mysql 显示数据表的结构&#xff08;字段&#xff09; describe user; Field:字段名称 type:数据类型 Null :是否允许为空 Key :主键 Type:数据类型 Null :是否…

缓存空间优化实践

导读 缓存 Redis&#xff0c;是我们最常用的服务&#xff0c;其适用场景广泛&#xff0c;被大量应用到各业务场景中。也正因如此&#xff0c;缓存成为了重要的硬件成本来源&#xff0c;我们有必要从空间上做一些优化&#xff0c;降低成本的同时也会提高性能。 下面以我们的案…

【Git】Gitee免密push(TencentCloudLinux)

前提&#xff1a; 我用的是腾讯云的Centos(Linux)服务器 我创建好了仓库 我配置过git 可以正常用密码push 以上自行解决 我们直接配置公钥解决免密push 1.在服务器上创建公钥 在用户根目录创建 公钥 邮箱写自己的 随意写 我写的是gitee绑定的邮箱 ssh-keygen -t ed25519 -C…

数据结构(六)—— 二叉树(2)遍历

文章目录 递归三要素一、深度优先遍历&#xff08;前中后序&#xff09;1.1 递归遍历1.1.1 前序&#xff08;中左右&#xff09;1.1.2 中序&#xff08;左中右&#xff09;1.1.3 后序&#xff08;左右中&#xff09; 1.2 迭代遍历1.2.1 前序1.2.2 后序1.2.3 中序 二、广度优先遍…

Renesas瑞萨A4M2和STM32 CAN通信

刚好拿到一块瑞萨开发板&#xff0c;捣鼓玩下CAN&#xff0c;顺便试下固件升级。 A4M2 工程创建 详细可以参考&#xff0c;我之前写的文章 Renesa 瑞萨 A4M2 移植文件系统FAT32 CAN0 配置信息&#xff0c;使能FIFO&#xff0c;接收标准帧 ID为0x50&#xff0c;数据帧。 代…

密码学【java】初探究加密方式之对称加密

文章目录 一 常见加密方式二 对称加密2.1 Cipher类简介2.2 Base算法2.3 补充&#xff1a;Byte&bit2.4 DES加密演示2.5 DES解密2.6 补充&#xff1a;对于IDEA控制台乱码的解决方法2.7 AES加密解密2.8 补充&#xff1a; toString()与new String ()用法区别2.9 加密模式2.9.1 …

内网渗透(六十二)之 NTLM Realy 攻击

NTLM Realy 攻击 NTLM Realy 攻击其实应该称为Net-NTLM Realy 攻击,它发生在NTLM认证的第三步,在Response 消息中存在Net-NTLM Hash,当攻击者获得了 Net-NTLM Hash 后,可以重放Net-NTLM Hash 进行中间人攻击。 NTLM Realy 流程如图所示,攻击者作为中间人在客户端和服务器…

【C++】异常,你了解了吗?

在之前的C语言处理错误时&#xff0c;会通过assert和错误码的方式来解决&#xff0c;这导致了发生错误就会直接把程序关闭&#xff0c;或者当调用链较长时&#xff0c;就会一层一层的去确定错误码&#xff0c;降低效率&#xff0c;所以c针对处理错误&#xff0c;出现了异常&…

奥斯汀独家对话|从机构的「拉扯」中成长的美国加密监管

‍前言 4月25日&#xff0c;在美国得克萨斯州的首府奥斯汀&#xff0c;这座充满活力和创造力的城市&#xff0c;欧科云链研究院与来自哥伦比亚商学院的Austin Campbell教授就美国加密监管以及其相关话题进行了一次深入探讨。双方讨论了美国整体的监管问题、监管逻辑、最新的稳…

git把我本地文件传到我的指定的仓库

在使用Git将本地文件推送到指定仓库之前&#xff0c;请确保已经安装了Git并进行了基本配置。接下来&#xff0c;遵循以下步骤将本地文件推送到远程仓库&#xff1a; 兄弟先赏析悦目一下&#xff0c;摸个鱼 首先&#xff0c;在本地文件夹中打开命令行界面&#xff08;在Windows上…

SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范&#xff0c;以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT&#xff08;JSON Web Token&#xff09;是一种…

【P1】Jmeter 准备工作

文章目录 一、Jmeter 介绍1.1、Jmeter 有什么样功能1.2、Jmeter 与 LoadRunner 比较1.3、常用性能测试工具1.4、性能测试工具如何选型1.5、学习 Jmeter 对 Java 编程的要求 二、Jmeter 软件安装2.1、官网介绍2.2、JDK 安装及环境配置2.3、Jmeter 三种模式2.4、主要配置介绍2.4.…

外卖项目优化-02-

文章目录 瑞吉外卖项目优化-Day02课程内容前言1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.2 主库配置1.2.3 从库配置 1.3 测试 2. 读写分离案例2.1 背景介绍2.2 ShardingJDBC介绍2.3 数据库环境2.4 初始工程导入2.5 读写分离配置2.6 测试 3. 项目实现读写分离3.1 数据…

HTML(四) -- 多媒体设计

目录 1. 视频标签 2. 音频标签 3. 资源标签&#xff08;定义媒介资源 &#xff09; 1. 视频标签 属性值描述autoplayautoplay如果出现该属性&#xff0c;则视频在就绪后马上播放。controlscontrols表示添加标准的视频控制界面&#xff0c;包括播放、暂停、快进、音量等…

【LLM】离线部署ChatGLM-6B模型

目录 前言 准备环境 打包环境 下载/上传模型 部署模型 前言 甲方出手&#xff0c;天下我有&#x1f929;。圆梦了圆梦了~一直想整一台GPU服务器尝尝鲜&#xff0c;奈何钱包空空&#xff0c;虽然有可以在CPU上部署的方案&#xff0c;但效果却不是让人那么满意&#xff0c…

跟着杰哥学强化学习:多臂老虎机问题

多臂老虎机问题 现在有3台外观一模一样的老虎机,每个老虎机的赔率是不同的,摇动一次需要1块钱,现在给你100块钱,如何获取最大的收益。 如果我们知道了每个老虎的赔率,那么只要选择收益最高的那个老虎机就可以了,但现在问题是并不知道每个老虎机的收益。为了简单,我们假…

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的司机”

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走&#xff0c;车上带着学生考试要用的sj” 一头白发&#xff0c;满山青葱 在那斑驳的物件褶皱中&#xff0c;透过泛黄的相片&#xff0c;掩藏着岁月的冲刷和青葱的时光。曾经的青年早已经不复年轻&#xff0c;但是那份热爱…

Nachos系统的上下文切换

Fork调用创建进程 在实验1中通过gdb调试初步熟悉了Nahcos上下文切换的基本流程&#xff0c;但这个过程还不够清晰&#xff0c;通过源码阅读进一步了解这个过程。 在实验1中通过执行Threadtest&#xff0c;Fork创建子进程&#xff0c;并传入SimpleThread执行currentThread->…

MySQL学习笔记第七天

第07章单行函数 2. 数值函数 2.4 指数函数、对数函数 函数用法POW(x,y)&#xff0c;POWER(X,Y)返回x的y次方EXP(X)返回e的x次方&#xff0c;其中e是一个常数&#xff0c;2.718281828459045LN(X)&#xff0c;LOG(X)返回以e为底的X的对数&#xff0c;当x<0时&#xff0c;返…