kamailio-ACC模块介绍【kamailio6.0. X】
Acc 模块
作者
Jiri Kuthan
iptel.org
jiri@iptel.org
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro
Ramona-Elena Modroiu
rosdev.ro
ramona@rosdev.ro
编辑
Bogdan-Andrei Iancu
Voice Sistem SRL
bogdan@voice-system.ro
Sven Knoblich
1&1 Internet AG
sven.knoblich@1und1.de
版权
© 2002, 2003 FhG FOKUS
© 2004, 2006 Voice Sistem SRL
© 2011 1&1 Internet AG
目录
- 管理员指南
- 概述
1.1 通用示例 - 额外计费
2.1 概述
2.2 定义与语法
2.3 工作原理 - 多呼叫腿计费
3.1 概述
3.2 配置
3.3 记录的数据 - 呼叫数据记录生成
4.1 概述
4.2 CDR 额外信息
4.2.1 定义与语法
4.3 多呼叫腿的 CDR
4.3.1 概述
4.3.2 配置
4.3.2.1 螺旋代理示例
4.3.3 记录的数据 - 依赖
5.1 Kamailio 模块
5.2 外部库或应用程序 - 参数
6.1 early_media (整数)
6.2 failed_transaction_flag (整数)
6.3 failed_filter (字符串)
6.4 report_ack (整数)
6.5 report_cancels (整数)
6.6 detect_direction (整数)
6.7 acc_prepare_flag (整数)
6.8 acc_prepare_always (整数)
6.9 acc_extra_nullable (整数)
6.10 multi_leg_info (字符串)
6.11 log_flag (整数)
6.12 log_missed_flag (整数)
6.13 log_level (整数)
6.14 log_facility (字符串)
6.15 log_extra (字符串)
6.16 db_flag (整数)
6.17 db_missed_flag (整数)
6.18 db_table_acc (字符串)
6.19 db_table_missed_calls (字符串)
6.20 db_url (字符串)
6.21 acc_method_column (字符串)
6.22 acc_from_tag_column (字符串)
6.23 acc_to_tag_column (字符串)
6.24 acc_callid_column (字符串)
6.25 acc_sip_code_column (字符串)
6.26 acc_sip_reason_column (字符串)
6.27 acc_time_column (字符串)
6.28 db_extra (字符串)
6.29 db_insert_mode (整数)
6.30 cdr_enable (整数)
6.31 cdr_skip (字符串)
6.32 cdr_expired_dlg_enable (整数)
6.33 cdr_start_on_confirmed (整数)
6.34 cdr_facility (整数)
6.35 cdr_extra (字符串)
6.36 cdr_extra_nullable (整数)
6.37 cdr_start_id (字符串)
6.38 cdr_end_id (字符串)
6.39 cdr_duration_id (字符串)
6.40 cdr_log_enable (整数)
6.41 cdrs_table (字符串)
6.42 time_mode (整数)
6.43 time_attr (字符串)
6.44 time_exten (字符串)
6.45 time_format (字符串)
6.46 reason_from_hf (整数)
6.47 clone_msg (整数)
6.48 cdr_on_failed (整数)
6.49 acc_extra_size (整数)
6.50 cdr_extra_size (整数) - 函数
7.1 acc_log_request(comment)
7.2 acc_db_request(comment, table)
7.3 acc_request(comment, table)
- 概述
- 常见问题
1. 概述
ACC 模块用于将事务信息记录到不同的后端,如 syslog 和 SQL。通过单独的模块 acc_radius 可以启用对 RADIUS 的支持。
acc_diameter 模块中提供了对 Diameter 协议的早期支持,但未与当前 Diameter 协议保持同步。如果需要 Diameter 支持,请使用 ims_charging 模块。
要为事务计费并选择使用哪一组后端,脚本编写者只需设置一些标志(参见模块参数部分的标志定义)。如果为特定后端设置了计费标志,ACC 模块将在事务完成时报告。模块的典型用法不需要特定的脚本命令——功能通过事务处理隐式绑定。脚本编写者只需使用适当的 setflag 标记事务以进行计费。即使如此,模块仍允许脚本编写者通过某些脚本函数在特殊情况下强制计费。
默认情况下,计费模块会记录事务的一组固定属性。如果要通过添加更多信息来自定义计费,请参阅下一章关于额外计费的内容。
固定的最小计费信息包括:
- 请求方法名称
- From 头的 TAG 参数
- To 头的 TAG 参数
- Call-Id
- 最终回复的 3 位状态码
- 最终回复的原因短语
- 事务完成时的时间戳
如果请求中不存在某个值,则记录为空字符串。
注意:
- 单个 INVITE 可能会生成多个计费报告——这是由于 SIP 的分叉特性。
- 所有与计费相关的标志都需要在请求处理路由中设置——只有“missed-call”标志可以从其他类型的路由中切换。
- 如果 UA 在通话中途失败,代理将永远不会发现。通常,更好的做法是从终端设备(如 PSTN 网关)进行计费,因为它最了解呼叫状态(包括媒体状态和 PSTN 状态)。然而,基于 CDR 的日志记录可以选择记录来自过期对话的现有信息(
cdr_extra中的dlg_vars)。请参阅cdr_expired_dlg_enable参数。
SQL 后端支持已编译到模块中。
1.1 通用示例
loadmodule "modules/acc/acc.so"
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)if (uri=~"sip:+40") { /* 呼叫罗马尼亚 */if (!proxy_authorize("sip_domain.net", "subscriber")) {proxy_challenge("sip_domain.net", "0");exit;}if (method=="INVITE" && !check_from()) {log("from!=digest\n");sl_send_reply("403","Forbidden");}setflag(1); /* 设置计费标志 */t_relay(); /* 进入有状态模式 */
};
2. 额外计费
2.1 概述
除了静态的默认信息外,ACC 模块还允许动态选择要记录的额外信息。这允许您记录任何伪变量(AVP、请求的部分等)。
2.2 定义与语法
通过 xxx_extra 参数选择额外信息,指定要记录的附加信息的名称。这些信息通过伪变量定义,可能包括头、AVP 值或其他消息或系统值。参数语法为:
xxx_extra = extra_definition (';'extra_definition)*
extra_definition = log_name '=' pseudo_variable
支持的伪变量列表可在 Kamailio 文档 中找到。
2.3 工作原理
某些伪变量可能返回多个值(如头或 AVP)。在这种情况下,返回的值将以逗号分隔的格式嵌入单个字符串中。
3. 多呼叫腿计费
3.1 概述
由于转发操作,SIP 呼叫可能具有多个腿。例如,用户 A 呼叫用户 B,用户 B 将呼叫转发给用户 C。只有一个 SIP 呼叫,但有两条腿(A 到 B 和 B 到 C)。记录呼叫腿对于正确计费是必要的。
3.2 配置
通过一组 AVP 为每个呼叫腿存储一组值。脚本编写者必须确保正确插入这些 AVP。
3.3 记录的数据
对于每个呼叫,所有 AVP 集的值将被记录。记录方式取决于数据后端:
- syslog:所有腿集将作为一个记录字符串添加。
- 数据库:每个腿集将单独记录。
- RADIUS:所有腿集将添加到同一 RADIUS 计费消息中。
4. 呼叫数据记录生成
4.1 概述
除了基于事务的日志记录外,还可以直接从 Kamailio 生成和记录呼叫数据记录(CDR)。CDR 记录依赖于对话框模块。
4.2 CDR 额外信息
类似于事务额外信息,CDR 额外信息通过 cdr_extra 参数定义。
4.3 多呼叫腿的 CDR
与普通计费不同,CDR 日志记录使用对话框而不是事务来记录数据。
5. 依赖
5.1 Kamailio 模块
该模块依赖于以下模块:
- tm:事务管理器
- 数据库模块:如果使用 SQL 支持
- rr:记录路由,如果启用了
detect_direction参数 - dialog:对话框,如果启用了
cdr_enable参数
5.2 外部库或应用程序
无。
6. 参数
6.1 early_media (整数)
是否应记录早期媒体(任何带有正文的临时回复)?
默认值为 0(否)。
6.2 failed_transaction_flag (整数)
事务失败时(SIP 状态码 >= 300)是否应记录事务的标志。
默认值为未设置(无标志)。
6.3 failed_filter (字符串)
失败响应代码的字符串(300 到 999),用逗号分隔。即使设置了 failed_transaction_flag,如果响应代码在列表中,失败事务也不会被记录。
默认值为未设置(无过滤)。
6.4 report_ack (整数)
是否尝试记录端到端的 ACK?
默认值为 0(否)。
6.5 report_cancels (整数)
是否显式记录 CANCEL 事务?
默认值为 0(否)。
6.6 detect_direction (整数)
控制顺序请求的方向检测。
默认值为 0(禁用)。
6.7 acc_prepare_flag (整数)
事务标志,指示是否可以在稍后计费。
默认值为未设置(无标志)。
6.8 acc_prepare_always (整数)
是否始终准备所有请求以标记事务稍后计费。
默认值为未设置。
6.9 acc_extra_nullable (整数)
如果设置为 1,数据库额外字段在未定义或为 $null 时设置为 NULL。
默认值为 0。
6.10 multi_leg_info (字符串)
定义用于每条呼叫腿计费的 AVP 集。
默认值为 0(禁用)。
6.11 log_flag (整数)
请求标志,用于通过 syslog 记录事务。
默认值为未设置(无标志)。
6.12 log_missed_flag (整数)
请求标志,用于通过 syslog 记录未接呼叫。
默认值为未设置(无标志)。
6.13 log_level (整数)
记录计费消息的日志级别。
默认值为 1(L_NOTICE)。
6.14 log_facility (字符串)
记录计费消息的日志设施。
默认值为 LOG_DAEMON。
6.15 log_extra (字符串)
要记录的额外值。
默认值为 NULL。
6.16 db_flag (整数)
请求标志,用于通过数据库记录事务。
默认值为未设置(无标志)。
6.17 db_missed_flag (整数)
请求标志,用于通过数据库记录未接呼叫。
默认值为未设置(无标志)。
6.18 db_table_acc (字符串)
成功呼叫的计费表名。
默认值为 “acc”。
6.19 db_table_missed_calls (字符串)
未接呼叫的计费表名。
默认值为 “missed_calls”。
6.20 db_url (字符串)
SQL 地址。
默认值为 NULL(SQL 禁用)。
6.21 acc_method_column (字符串)
存储请求方法名称的列名。
默认值为 “method”。
6.22 acc_from_tag_column (字符串)
存储 From 头 TAG 参数的列名。
默认值为 “from_tag”。
6.23 acc_to_tag_column (字符串)
存储 To 头 TAG 参数的列名。
默认值为 “to_tag”。
6.24 acc_callid_column (字符串)
存储 Callid 值的列名。
默认值为 “callid”。
6.25 acc_sip_code_column (字符串)
存储最终回复状态码的列名。
默认值为 “sip_code”。
6.26 acc_sip_reason_column (字符串)
存储最终回复原因短语的列名。
默认值为 “sip_reason”。
6.27 acc_time_column (字符串)
存储事务完成时间戳的列名。
默认值为 “time”。
6.28 db_extra (字符串)
要记录到数据库的额外值。
默认值为 NULL。
6.29 db_insert_mode (整数)
如果设置为 1,使用 INSERT DELAYED 添加记录。
默认值为 0。
6.30 cdr_enable (整数)
启用 CDR 报告。
默认值为 0(禁用)。
6.31 cdr_skip (字符串)
跳过具有此 dlg_var 设置的对话框的 CDR 生成。
默认值为 NULL。
6.32 cdr_expired_dlg_enable (整数)
是否在对话框过期时启用 CDR 日志记录?
默认值为 0(禁用)。
6.33 cdr_start_on_confirmed (整数)
是否从对话框确认时开始计时?
默认值为 0(从对话框创建时开始)。
6.34 cdr_facility (整数)
CDR 消息的日志设施。
默认值为 LOG_DAEMON。
6.35 cdr_extra (字符串)
定义自定义 CDR 字段的伪变量集。
默认值为 NULL。
6.36 cdr_extra_nullable (整数)
自定义 CDR 字段是否可以为 NULL?
默认值为 0。
6.37 cdr_start_id (字符串)
修改用于存储开始时间的 ID。
默认值为 “start_time”。
6.38 cdr_end_id (字符串)
修改用于存储结束时间的 ID。
默认值为 “end_time”。
6.39 cdr_duration_id (字符串)
修改用于存储持续时间的 ID。
默认值为 “duration”。
6.40 cdr_log_enable (整数)
控制是否将 CDR 记录写入 syslog。
默认值为 1(启用)。
6.41 cdrs_table (字符串)
存储对话框 CDR 的数据库表名。
默认值为 “”(无数据库存储)。
6.42 time_mode (整数)
存储与事件时间相关的额外值。
默认值为 0。
6.43 time_attr (字符串)
存储事件时间的 syslog 属性或数据库列名。
默认值为未设置。
6.44 time_exten (字符串)
存储事件时间的扩展值的 syslog 属性或数据库列名。
默认值为未设置。
6.45 time_format (字符串)
指定时间格式。
默认值为 “%Y-%m-%d %H:%M:%S”。
6.46 reason_from_hf (整数)
从何处获取 sip_reason。
默认值为 0(从状态行获取)。
6.47 clone_msg (整数)
是否克隆请求结构以避免并发访问。
默认值为 1。
6.48 cdr_on_failed (整数)
是否存储失败对话框的 CDR?
默认值为 1。
6.49 acc_extra_size (整数)
设置计费记录中额外属性的最大数量。
默认值为 64。
6.50 cdr_extra_size (整数)
设置 CDR 中额外属性的最大数量。
默认值为 64。
7. 函数
7.1 acc_log_request(comment)
报告请求,例如用于报告未接呼叫。
参数:
- comment:要附加的注释,可以包含伪变量。
7.2 acc_db_request(comment, table)
将请求报告发送到数据库。
参数:
- comment:要附加的注释,可以包含伪变量。
- table:要使用的数据库表。
7.3 acc_request(comment, table)
将计费记录写入 LOG 和 DATABASE 后端。
参数:
- comment:用于生成 SIP 响应代码和文本字段的注释。
- table:要使用的数据库表。
2. 常见问题
2.1 旧的 log_fmt 参数发生了什么?
该参数已被废弃,由额外计费功能取代。
2.2 旧的 multi_leg_enabled 参数发生了什么?
该参数已被 multi_leg_info 参数取代。
2.3 旧的 src_leg_avp_id 和 dst_leg_avp_id 参数发生了什么?
这些参数已被 multi_leg_info 参数取代。
2.4 在哪里可以找到更多关于 Kamailio 的信息?
请访问 Kamailio 官方网站。
2.5 在哪里可以发布关于此模块的问题?
请查看我们的邮件列表:
- 用户邮件列表:[sr-users@lists.kamailio.org](https://lists.kamailio.org/mailman3/postorius
相关文章:
kamailio-ACC模块介绍【kamailio6.0. X】
Acc 模块 作者 Jiri Kuthan iptel.org jiriiptel.org Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Ramona-Elena Modroiu rosdev.ro ramonarosdev.ro 编辑 Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Sven Knoblich 1&1 Internet …...
数据库对象
数据库对象 数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类…...
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析
EtherCAT主站IGH-- 27 -- IGH之globals.h文件解析 0 预览一 该文件功能宏定义数据结构打印宏三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件包含了一些全局定义和宏,用于 IgH EtherCAT 主站(EtherCAT Master)的实现。包括了一些超时设定、宏定义…...
2025多目标优化创新路径汇总
多目标优化是当下非常热门且有前景的方向!作为AI领域的核心技术之一,其专注于解决多个相互冲突的目标的协同优化问题,核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中,几乎处处都有它的身影。 但随着需求场景的…...
15JavaWeb——Maven高级篇
Maven高级 Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。 我们讲到 Maven 是一款构建和管理 Java 项目的工具。经过前面 10 多天 web 开发的学习,相信大家对于 Maven 这款工具的基本使用应该没什…...
使用Ollama本地化部署DeepSeek
1、Ollama 简介 Ollama 是一个开源的本地化大模型部署工具,旨在简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。 Ollama …...
蓝桥杯刷题DAY1:前缀和
所谓刷题,讲究的就是细心 帕鲁服务器崩坏【算法赛】 “那个帕鲁我已经观察你很久了,我对你是有些失望的,进了这个营地,不是把事情做好就可以的,你需要有体系化思考的能力。” 《幻兽帕鲁》火遍全网,成为…...
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯项目基本介绍 🚦项…...
MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...
微服务入门(go)
微服务入门(go) 和单体服务对比:里面的服务仅仅用于某个特定的业务 一、领域驱动设计(DDD) 基本概念 领域和子域 领域:有范围的界限(边界) 子域:划分的小范围 核心域…...
Baklib揭示内容中台实施最佳实践的策略与实战经验
内容概要 在当前数字化转型的浪潮中,内容中台的概念日益受到关注。它不再仅仅是一个内容管理系统,而是企业提升运营效率与灵活应对市场变化的重要支撑平台。内容中台的实施离不开最佳实践的指导,这些实践为企业在建设高效内容中台时提供了宝…...
C++11新特性之lambda表达式
1.介绍 C11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。 2.lambda表达式用法 lambda表达式的基本用法为: [捕获列表](参数列表)->返回类型 { 函数体 …...
洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解
一、题目链接 P10289 [GESP样题 八级] 小杨的旅游 - 洛谷 二、题目大意 n个节点之间有n - 1条边,其中k个节点是传送门,任意两个传送门之间可以 以0单位地时间相互到达。问从u到v至少需要多少时间? 三、解题思路 输入不必多讲。 cin >> …...
使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践
Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…...
JWT入门
一、初识JWT:新时代的身份认证方案 在分布式系统成为主流的今天,传统的Session认证方式逐渐显露出局限性。JWT(JSON Web Token)作为现代Web开发的认证新标准,凭借其无状态、跨域友好和安全性等特性,正在成为…...
Python - Quantstats量化投资策略绩效统计包 - 详解
使用Quantstats包做量化投资绩效统计的时候因为Pandas、Quantstats版本不匹配踩了一些坑;另外,Quantstats中的绩效统计指标非常全面,因此详细记录一下BUG修复方法、使用说明以及部分指标的内涵示意。 一、Quantstats安装及版本匹配问题 可以…...
智慧园区管理系统推动企业智能运维与资源优化的全新路径分析
内容概要 在当今快速发展的商业环境中,园区管理的数字化转型显得尤为重要。在这个背景下,快鲸智慧园区管理系统应运而生,成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术,以智能化的方式解决了传统管理模式…...
【数据结构-字典树】力扣14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“dog”,“racecar…...
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL TLS/SSL协议和应用层协议无关,它只是加密应用层协议(比如HTTP)并传递给下层的TCP。 HTTP和TLS/SSL协议组合在一起就是HTTPS, HTTPS等…...
Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环。 目录 1. if 语句 2. switch语句 3. for语句 4. range语句 5. goto语句(不常用…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
