自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 收藏
  • 关注

原创 关于AWESOME-DIGITAL-HUMAN的部署

AWESOME-DIGITAL-HUMAN是一个轻量级开源数字人项目,支持容器化部署(前端3000端口/后端8000端口)。使用时需注意语音输入需在浏览器设置中允许不安全来源使用麦克风。如需HTTPS访问,需配置Nginx反向代理前后端服务。源码部署时需使用pnpm命令(非npm),调整配置需修改.env文件和next.config.mjs中的路径设置。项目提供灵活的部署选项,但部分配置需手动修改以适应特定需求。

2025-05-29 11:20:26 586

原创 openai-whisper-asr-webservice接入dify

OpenAI-Whisper-ASR-Webservice 提供的 ASR API 与 OpenAI 的 API 不兼容,特别是在处理音频文件时,前者使用 audio_file 参数,而后者使用 file 参数。为了在 Dify 中直接使用该服务,可以通过修改 API 请求参数来实现兼容。虽然尝试使用 OpenResty 的 Lua 脚本进行转发未成功,但通过 Node.js 和 Express 实现了一个简单的转发服务。该服务接收 OpenAI 格式的请求,将其转换为 Whisper-ASR 所需的格式,

2025-05-22 15:37:16 565

原创 excel大表导入数据库

在处理大数据量的Excel文件导入数据库时,直接使用传统方法可能会遇到内存限制和MySQL命令长度限制的问题。为此,可以采用流式读取和分批次导入的策略。本文提供了一个使用xlsx-extract模块和mysql2/promise库的示例代码,通过每批500条记录的方式将数据导入MySQL数据库。这种方法虽然效率不如直接导入CSV或JSON文件,但在处理复杂或易出错的数据时,提供了一种可行的解决方案。此外,代码中还处理了Excel文件中空白单元格的问题,确保数据字段与数据库字段一致。

2025-05-10 12:51:39 348

原创 excel表数据导入数据库

其实没有多复杂,我先将exel转成csv,结果mysql导入csv,第一行记录就没能成功导入,排错起来够折腾的,需要仔细检查每个字段的值,关键是这个表够宽的,果断放弃。前两天,有个两DB之间的数据导出导入的需求。对方提供的是excel表,我这边是mysql数据库,excel表第一行是字段名,之后的行是记录的值。下面是node.js代码,使用node-xlsx读excel文件,使用mysql2对接mysql数据库。600多条记录,一条插入命令搞定,当然如果记录比较多的话,可以考虑分批插入。

2025-05-06 10:32:11 303

原创 HTML中滚动加载的实现

这样基本完成了设计,但是仍有一些坑,一般数据的获取是从后端http异步调用得到,会花一些时间,而scroll的事件是浏览器前端触发,在数据获取期间,不应该继续向后端发起数据获取请求,每次数据获取完成时,再允许向后端发起数据获取请求,可以设置一个变量来标识是否在进行数据获取处理。有scroll事件,但是没有向上滚动或者向下滚动事件,滚动的方向是需要计算判断的,比如保存上次滚动时的scrollTop,跟当前的scrollTop进行比较,当前的大,则是向下滚动,当前的小,则是向上滚动。

2025-03-17 15:39:53 540

原创 给没有登录认证的web应用添加登录认证(openresty lua实现)

首先是直接修改nextjs-ollama-llm-ui的源码,其实我就是这么做的,因为这样接入能将登录用户信息带入应用,可以定制页面,将用户显示在页面里,体验会更好。这阵子不是deepseek火么?用户认证信息是存放在后端redis中,key是SID,value是认证访问返回的包含用户信息的json对象转的字符串,在认证成功后写入。其实也有现成的oauth2的轮子,不过我们自己手写lua代码的话,可以更灵活的配置,对接一些非标准的web认证服务也可以的。

2025-03-05 14:35:19 550

原创 对免认证服务提供apikey验证

如果是使用json文件来存放apikey信息的话,nginx需要使用lua模块来读取json文件,进行解码,windows版的nginx默认不带lua模块,可以用openresty,它相当于集成了lua模块的nginx。还有一个就是我最终选择的方案-redis,apikey维护服务在apikey生效或者失效时更新redis的集合,nginx从redis里检查集合里是否包含请求头中的apikey。一些服务不带认证,凡是可以访问到服务端口,都可以正常使用该服务,方便是方便,但是不够安全。

2025-02-21 20:13:53 479

原创 浏览器扩展实现网址自动替换

目前也有很多方案可以对应这种囧况,我此前知道有一个网站kkgithub,基本上把github的静态内容都搬了过来,我们如果需要访问某个github上的网页或资源,将url中的host从github.com替换成kkgtihub.com就可以正常打开访问到。然后在浏览器的扩展里管理扩展里确保启用开发人员模式,加载解压缩的扩展,选择扩展目录,选中刚才创建的那个git2kk文件夹,然后确保扩展中启用了这个GitHubRedirect扩展。以下是用chrome扩展方式实现的,微软edge一样可用。

2025-02-14 09:44:07 356 1

原创 调用腾讯云批量文本翻译API翻译srt字幕

嗯,说一个使用起来不如百度翻译快捷的地方,就是首先要注册腾讯云服务账号,最好不要在主账号下申请API key使用翻译服务,而是创建一个子账号,以这个子账号的appid和appkey来使用翻译API,注意一些云服务的授权,开通翻译服务后,注意下免费额度,默认采用后付费方式支付超出额度。百度翻译API是get方式调用,参数都放在ur中,每次调用翻译文本长度除了接口限制外,还有url长度限制,而日文字符通过ur转码后会占9个字符长度,其实从这个角度来讲,get方式传参效率确实不高。

2025-02-04 12:44:42 594

原创 调用百度翻译API翻译日语srt字幕

要调用百度翻译api,首先你需要在百度翻译注册账号开通通用文本翻译服务,注册后得到appid和密钥,可以根据自己的情况开通不同级别的服务。单次最长请求1000字符。什么,只有视频,没有字幕文件怎么办,推荐一下集成了语言识别vosk的视频字幕工具SubtitleEdit,其实它也支持自动翻译功能,不过它调用的是google翻译或微软bing翻译API,目前我们这里访问有些问题,所以只好退而求其次,整出srt字幕,再自行翻译处理,国内能免费使用的翻译api其实也有好几个,比较了下,百度的给的免费额度大一些。

2025-02-03 16:28:42 746

原创 node.js的进程保活

注意spawn带上{ detached: true, stdio: ‘ignore’ }参数,是为了确保主进程退出,后台服务仍然保持运行。这样,我们可以根据svcs的定义定时检查pids目录下的这些文件,看它们的进程还在不?不在的话,执行启动服务命令拉起服务。nodejs的进程保活其实用PM2应该更好用些,不过由于原理其实并不复杂,我们可以自己手写一个服务来干这个工作。上面这个例程是一个一次性运行的脚本,可以简单的改造成定时任务,就从略了。服务启动时将进程id保存到这个pid文件中。

2025-01-14 11:50:42 439

原创 关于windows下winrar命令行解压长路径文件的尝试

先说下结论,winrar GUI方式中是可以解压包内全路径+文件名长度超过260字符的文件,但是命令行方式就不支持,其中命令行方式包含winrar默认安装目录中的winrar.exe和rar.exe还有unrar.exe,以及rarlab网站上放的freeware的unrar.exe,这样其实就已经卡断了很多应用/模块/库通过操作系统调用winrar命令行执行解压长名文件的途径。

2024-12-26 13:42:10 495

原创 JavaScript中函数调用时的参数传递

另外要注意下,回调函数里的写法一般是一个一个的参数传入,但是promise的then函数里,就不一定是这样传递了,因为then的入参是前面promise的执行结果返回值里的resolve带出来的参数,可能是一个单值,可能是一个json对象,可能是一个数组。这种情况其实很常见,经常我们很多函数是回调函数形式,回调函数的入参是一般error,res1,res2…JavaScript中,function定义时的参数和调用时的参数其实可以不用完全一致的,当然书写比较讲究的可以严格保持一致,这也是一种好的风格。

2024-12-23 13:00:48 288

原创 promise链式操作的状态转移

注意,如果上面3种处理的代码段内如果没有返回其他promise函数或者显式返回reject的话,那么该段执行后的promise状态会变为resolve,接下来会执行的是后面第一个then或者finally语句段。promise语法书写顺序一般会建议先是then,可以有多个,然后一个catch,最后一个finally,但是实际上没有这种限制,可以任意顺序排列多个then、多个catch和多个finally,而执行逻辑是根据从左到右的promise状态,根据当前结果可能会跳过后面的一段或几段语句段的执行。

2024-12-19 09:43:41 233

原创 确保某路径下存在某文件

我看了下,感觉不太满意。用node.js自带的fs模块的话,有这么几步走:检查文件是否存在,不存在的话,创建文件,创建失败的话,先创建目录,再创建文件。另外关于创建空文件,虽然fs.writeFile(file,‘’)只需要一条语句,我打开和关闭文件需要两条语句,个人理解实际开销可能后者更小一些。

2024-12-17 16:40:06 194

原创 await的几个小技巧

再说另一个场景,比如我想获取某个指定目录下的文件列表,正常逻辑是先调用fs.access检查看目录是否存在,不存在的话,直接返回,存在的话,再调用fs.readdir读取目录内容,而js的风格是直接readdir,要么出错,要么得到目录内容。await是个很好用的语法,能以接近同步的方式执行异步的操作,跟回调和链式执行比,代码非常简洁。不过它也有些限制,它只能包含在模块的顶级代码块里,像forEach()之类函数的内部执行段内就不能包含await语句了,不过也好替换解决:比如。

2024-12-10 11:49:29 241

原创 为web接口增加认证信息

首先要接受在http请求头中传递这些自定义的header字段,然后要检查这些字段是否匹配预设值,时间是否同步(允许一定范围内的偏差),签名是否正确。上一篇文章介绍的是增加认证信息后,调用方需要适配的改动,本篇介绍下接口服务方的改动。

2024-12-04 10:19:06 293

原创 适配增加认证信息后的接口

为方便调用方适配,采用的是在headers里增加appid、时间戳、随机字符串和签名的方案,给授权调用方提供appid和appkey,签名采用比较简单的md5算法,具体是sign=md5(appid+noncestr+timestamp+appkey)如果访问其他接口也有相应的header中包含认证信息要求的话,可以在这个拦截器中添加对特定接口的config.headers配置即可,不用在访问接口的业务逻辑代码块中修改来支持。这样处理的话,安全和业务可以分开,感觉还是比较不错的。

2024-12-04 09:39:32 160

原创 windows下的junction符号链接

为了保证文件在特定路径下可以正常使用,我们除了可以将文件或目录复制到特定路径下,其实也可以创建符号连接以达到目的,这样做的好处是不占用文件系统的文件内容存储空间,仅在目录表中添加一项。当然对符号链接目录下的文件的修改和删除不是对副本的修改和删除,而是对原本的修改和删除,所以使用时要注意下。在web共享场景,就挺适合,不涉及到修改,就是查看和下载,一旦允许共享,文件夹立刻就可以被接受者看到,由于不涉及到文件的复制,跟文件复制的方式比较,既省空间又更快速,服务器资源占用更少;当然取消共享也是立刻生效的。

2024-12-02 10:18:27 298

原创 node.js中实现MySQL的增量备份

有时候,我们需要对生产库进行备份,不要求实时性很高,大概每天一次就行,为性能考虑,只备份最新更改内容,即增量备份即可,这种场景下对DB的设计和备份语句有所要求。我们不仅要考虑新增记录,还要考虑记录的修改。要在源表中包含数据新增或者修改的时间属性字段。这样可以筛选出需要增量备份的记录。可以采用insert into on duplicate key update方式来执行添加或修改。目标表跟源表一样定义主键,如果源表有自增字段,目标表取消该字段自增属性。源表要有主键,没有主键的要增加一个自增ID来充当主键。

2024-11-27 09:54:29 470

原创 json数组写入文件每行一条数据

而JSON.stringify(value,replacer,space)则会在每条数据项之间加换行,比如方括号、花括号、逗号后面都会跟换行的,打开查看的话会感觉页面很空旷。我们知道将json或json数组写入文件,一般是用JSON.stringify先将json或json数组转成字符串,再写入文件。JSON.stringify()的语法是这样的:JSON.stringify(value[, replacer[, space]])就不能简单的使用JSON.stringify()直接转JSON对象写入文件。

2024-11-21 09:52:58 334

原创 nginx反向代理上游服务器主从配置

nginx.conf中可以将location反向代理到一个或多个上游服务器处理,其中多个上游服务器可以配置成一个上游服务器组,并定义相应的NLB策略来相应请求,比如默认的轮询、最少连接数、IP哈希、权重等。proxy_next_upstream 参数一般用于配置了多个上游服务器的上游服务器组,会尝试转发到另外一台上游服务器,不过如果没有没有配置上游服务器组的话,它会对于那唯一的一台服务器再次尝试一次。

2024-11-15 14:05:08 632

原创 页面元素内容复制到剪贴板

我们可能会遇到这样一个场景,需要将页面里某串文本复制到剪贴板,比如链接,生成的动态令牌、验证码等,这里会用到两个动作,在页面中选择文本和复制到剪贴板。人手操作的话,就是拿鼠标选择页面内的元素的文本内容,然后按下Ctrl+C键,这样就完成了,那么用JS怎样实现呢?不过很多情况下,也许是span元素,也许是div元素,或者input元素但是有readonly或disable属性,那么是不能简单地用上面的语句来选择了。这样在页面中点击“拷贝令牌”的按钮,就可以把动态令牌复制到剪贴板中了。假设页面中有这样的内容。

2024-11-12 10:26:55 462

原创 html页面中的按钮元素

按照文档,如果这后两种按钮没有位于form内部,但是页面中有form,那么按下后两种按钮会提交或重置最近的表单,如果在按钮前面和后面都紧跟着一个form,那么会影响前面的还是后面的form呢?你得自己尝试下看看。用button来描述按钮,在form外,默认相当于type="button"的input,但是在在form内,它默认相当于type="submit"的input,所以如果不想按下执行提交的话,应该书写为。html中input可以描述按钮,它有三种类型的按钮,分别是。

2024-11-04 11:15:50 318

原创 promise的catch放在then前面的场景

我们知道Promise 的 .then() 和 .catch() 方法的链式调用顺序通常是先 .then() 后 .catch()。这是因为 .then() 方法用于处理成功的情况,而 .catch() 方法用于处理失败的情况。.catch() 方法会捕获前面所有 .then() 链中抛出的异常,以及在 Promise 执行过程中发生的任何错误。

2024-11-01 17:24:26 486

原创 跨站调用(CORS)一例

1 两服务器Session数据保存到共同的redis中,实现session共享。2 服务器B网页的JS请求访问服务器A接口采用fetch,带上Cookie。大体没有毛病,不少小坑需要注意,还是可以调通的。3 服务器A需配置支持服务器B的跨站访问。

2024-10-22 15:45:37 171

原创 不修改主程序通过模块支持更多功能

个人或者小团队开发,一般模块命名,功能,接口都是预先设定好的,而跨团队开发,功能不断增加支持的话,会迭代更新较快,实现功能和调用方式可以固定,但是支持对象会不断增加,比如一个系统要支持对某格式文件的处理,最开始只支持后缀为A的,后续要增加支持后缀为B的,再后续要增加支持后缀为C的。虽然require在代码中好像会多次加载,不过nodejs对于require的模块会缓存,首次从本地硬盘加载后,此后再执行则直接使用缓存,除非缓存被清除掉,才会再从本地硬盘加载,所以也不会带来大量磁盘IO。

2024-10-16 11:34:07 294

原创 JS代码中的条件异步实现比较

那说下,这个await predeal();await是非阻塞的,await会暂停函数的执行,直到Promise被解决(resolved)或拒绝(rejected),但它不会阻塞整个事件循环。所以在nodejs编程实现上,能用异步尽量用异步,同步调用看起来虽然很简洁,但是执行会拉跨的。但是这样会有什么问题呢?同步操作会阻塞Node.js的事件循环,直到操作完成。这意味着在操作完成之前,Node.js不能执行其他代码,包括处理其他I/O操作或响应网络请求。所以为效率着想,可以考虑采用异步来优化。

2024-10-15 14:37:26 250

原创 数据安全的一个案例

我的这种方式前端没有留存员工和部门信息,仅传输一条查询结果。疫情期间,曾经给单位做了一个访客系统,访客预约入口实际上就是一个H5页面,挂在单位公众号上,访客不需要关注公众号,也不需要注册,直接访问填报相关个人相关信息后,选择受访人,点击提交申请,前端会进行一些必要的信息检查,符合要求则提交到后端,后端会再进行一些必要的信息检查,符合要求,则创建内部OA流程,受访人、部门领导进行审批,审批通过则向申请人发邮件,内容包含一个访客二维码图片,访客持该二维码可以在预约的时间段内进入预约场所。

2024-10-12 10:56:50 284

原创 人脸识别face-api.js应用简介

后端nodejs收到arraybuffer的float32array数组,直接转base64编码,更新内存中的人脸库json数组中,并通过websocket发送到可信前端以更新人脸匹配器,关于保存到json文件,不用每次更新都写入,可以定义一个接口,按请求来写入。每次后端收到新的人脸绑定信息后,也会更新人脸库,并将人脸库更新也传到这个可行前端,它重新创建人脸匹配器(根据已有的文档资料,发现只能根据全量人脸库,创建人脸匹配器,无法增量更新)前阵子学习了一下face-api.js ,偶有心得,跟大家分享一下。

2024-10-08 10:04:25 1779

原创 浏览器前端向后端提供服务

它其实有浏览器端的完整模块,但是我觉得人脸识别在实际场景中应用,全部在前端做识别不太安全,因为浏览器侧未必完全安全可控,可以考虑人脸登记注册时前端将照片和用户绑定信息发到后端,后端识别出描述信息保存,识别阶段,浏览器调用摄像头识别出人脸描述信息,发往后端,在后端进行匹配验证,这样会更安全可靠一些。但是出现了一个状况,后端依赖库中有部分依赖不翻墙是下不下来。WEB后端向浏览器前端提供服务是最常见的场景,前端向后端的接口发起GET或者POST请求,后端收到请求后执行服务器端任务进行处理,完成后向前端发送响应。

2024-10-03 10:58:37 696

原创 mysql代理服务器

mysql proxy,看这个名字就知道它可以做这个事情,不过mysql对该产品及命名不满意,甚至没有发布正式版就放弃了,官网归档版中最后的版本号是0.85alpha,也开源在github上,版本是0.8,其实应该是同一个版本的。如果你只是想试一下mysql代理,mysql proxy应该就够用,如果要在正式环境部署使用,建议采用mysql router,毕竟这个是原厂持续支持的产品。有这样的使用场景,需要对DB访问端隐藏后端真实的mysql服务器的IP和端口,向它提供一个代理的IP和端口。

2024-09-25 16:20:30 383

原创 数据库查询web服务接口

设想这样一个场景:DB是集中管理的,新的应用系统会向DB服务器申请一个库来存放应用系统使用的若干表,应用系统也会包含有多个不同角色的服务器,可能它们还是由不同的开发小组负责,如果都直连DB其实也可以,不过也有其他方式降低对DB直连的依赖,比如应用中封装一个web接口来提供DB查询服务。如果返回结果的字段较多,字符串编码直接返回的话,传输量较大,可以考虑db查询结果result采用protobuf编码后返回web请求端,在请求端protobuf解码,从而减少数据传输量。

2024-09-24 12:55:21 320

原创 AutoX.js向后端传输二进制数据

AutoX.js的http也是这样,但是AutoX.js还支持Websocket,它的websocket模块,采用okhttp3 实现,模块中包含了okhttp3 核心所有的类,而okhttp3支持发送String和ByteString,而后者则是我心心念念的二进制数据传输功能。其实主要是效率考虑,比如我使用截图,在内存中可以得到image的字节数组,如果传文件,还得把image写入本地硬盘,然后发送出去,又得读一遍本地硬盘,不是浪费了这两次IO么?这样就完成了前端抓图直接传到后端保存图片的流程。

2024-09-20 10:40:50 794

原创 局域网视频聊天

WebRTC (Web Real-Time Communications) 允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流/音频流或者其他任意数据的传输。它可以使你取得任何硬件资源的媒体数据。服务端启动后,浏览器地址栏输入 http://[hostname]:8080/peerjs.html&uid=【你的昵称】即可,大家都进入页面后,你可以页面输入框里输入对方的uid,点击video chat按钮即可与对方视频聊天,是不是很简单?

2024-09-10 15:36:11 831

原创 PWA离线简单示例

浏览器首次访问会注册service-worker,service-worker就开始工作了,把相关文件缓存到本地,并监听fetch事件。之后再访问,已经有缓存的情况下,就不会再访问目标网站, 而是直接从本地缓存加载页面脚本,渲染执行,目标网站即使离线,也不会影响了。当然了,如果该网页应用是个单机版应用,那应该没有啥问题,如果还是个网络应用的话,那么仅该网页缓存走本地,其他目标资源还得走网络,它们不可访问也会影响离线效果的。这样就齐活了,是不是很简单。这些参数值你可以自行定义。然后在页面html中引用。

2024-09-04 15:38:59 428

原创 浏览器调用摄像头扫二维码

其实现在比较新的手机,摄像头也大都支持扫二维码,不过接口不统一,终端类型较多的情况下,对开发者是很麻烦的。好在浏览器有标准统一的接口获取摄像头的视频流,这个基本就够用了。至于扫码二维码,可以通过视频流截图,用JS的一些二维码库来识别,比如jsQR就比较好用。此前用微信扫一扫很方便,不过用微信扫一扫需要有微信公众号或者服务号,微信小程序扫码也很方便,不过需要微信开发者账号,而且现在微信小程序好些地方也开始计费了。以下给出一个例子,在ios下可以正常工作,注意需要放在https的web路径下。

2024-09-03 21:47:15 794

原创 让TOTP支持国密SM3算法

只是生成当前时间的动态密码还达不到OTP的功能要求,一般OTP还能允许预设定的前后几个时间窗口的密码验证通过,实现起来也不麻烦,不过可以直接利用其他现成的轮子改改,比如speakeasy的OTP,虽然默认不支持SM3,但是跟其他算法的主要区别就在摘要函数实现中,改改就可以支持SM3算法了。做一个算法为SM3的otpauth url很简单,设置下&algorithm=SM3即可,不过常用的这些扫码的app由于不支持SM3算法,所以不能正确显示动态密码。国密SM3算法是公开的,可以自行开发实现。

2024-09-02 16:51:50 771

原创 node中处理rar文件

而rar格式由RARLAB开发,使用RAR格式可能需要遵守RARLAB的许可协议,当然了rarlab也比较有意思,它的软件你不注册也可以一直使用,windows平台上会弹出广告,也还是有不少企业购买了winrar的许可。闲话不多说,因为rar也很好用,至少在windows平台上用户还挺多,开发软件还是需要考虑对rar的支持,提升下用户体验。npm的资源里,支持rar的比较少,基本上支持的也是要靠调用系统安装的rar或者winrar,rar的命令也不复杂,干嘛还要去求诸外,自己手写一个用算了。

2024-08-28 15:49:42 258

原创 使用axios的fetch adapter遇到浏览器兼容问题

axios 2024年5月20号发布1.7.0版,开始支持fetch adapter,我是很高兴的,把此前fetch写的语句换成axios的,感觉简洁了很多。在微软edge、谷歌chrome较新的版本上运行良好,在较早版本的微软edge、谷歌chrome则遇到axios报错。哎,可惜了,为兼容更多的浏览器客户端,只好继续用fetch了。主要是data不能直接简明地放在fetch调用的参数里。其实差不多,只是个人喜好而已。

2024-08-24 11:41:49 502

nodejs调用textra webapi使用机器翻译的demo

textra翻译webapi调用node.js代码示例,textra是日本nict的开发的一款机器翻译服务,免费使用,注册账号得到apikey和apisecret即可调用webapi使用机器翻译服务

2025-02-06

阿里云通用文本批量翻译API测试脚本

阿里云服务的机器翻译中的通用文本批量翻译API调用测试

2025-02-05

阿里短信服务node.js测试

脚本中部分参数请自行替换,用户需注册阿里云账号,采用RAM方式授权SMS发送服务,并创建好签名和模板并被审核通过,发送成功,但是手机收不到短信,请检查签名是否被运营商拉黑

2025-01-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除