AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

118
技术文章
8
文章分类
537
技术标签
29971
累计字数
NPOI 根据模板导出 word文档
后端开发
2020-11-21 • 0k

NPOI 根据模板导出 word文档

文档模板: 单一字段替换:#batchNo# 需要循环的表格:$mx.NTime$ 生成后文档: 调用方式: NpoiHeplper.Export("OffShelfInfoTemplate.doc", $"new{dt}.doc", data); data数据为字典格式 var dt = DateTime.Now.ToString("yyyyMMddHHmmss"); Dictionary<string, object> data = new Dictionary<string, object>(); List<Dictionary<string, object>> list = new List<Dictionary<string, object>>(); Dictionary<string, object> item1 = new Dictionary<string, object>(); item1.Add("NTime", "2020-11-21"); item1.Add("StoreName", "先南小吃"); item1.Add("Addres", "北京昌平区中街211"); item1.Add("Num", "5"); item1.Add("Name", "杨过"); list.Add(item1); // new item2 item3 item4... //list.Add(item2); //list.Add(item3); //list.Add(item4); //new xqList data.Add("batchNo", $"No.{DateTime.Now.ToString("ddHHmmss")}"); data.Add("noticeTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); data.Add("userName", "张三"); data.Add("ApprovalDate", DateTime.Now.ToString("yyyy-MM-dd")); data.Add("mx", list); //data.Add("xq", xqList); 主要代码: /// <summary> /// 输出模板word文档 /// </summary> /// <param name="tempFilePath">docx文件路径</param> /// <param name="outPath">输出文件路径</param> /// <param name="data">字典数据源</param> public static void Export(string tempFilePath, string outPath, Dictionary<string, object> data) { using (FileStream stream = File.OpenRead(tempFilePath)) { XWPFDocument doc = new XWPFDocument(stream); //遍历段落 foreach (var para in doc.Paragraphs) { ReplaceKey(para, data); } //遍历表格 foreach (var table in doc.Tables) { var ti = GetTableInfo(table, data); if (ti.IsList) { for (int i = 0; i < ti.Data.Count; i++) { var nRow = new XWPFTableRow(Clone<CT_Row>(ti.RowTemp), table); table.AddRow(nRow); ReplaceRow(nRow, (Dictionary<string, object>)ti.Data[i]); } } foreach (var row in table.Rows) { foreach (var cell in row.GetTableCells()) { foreach (var para in cell.Paragraphs) { ReplaceKey(para, data); } } } } //写文件 FileStream outFile = new FileStream(outPath, FileMode.Create); doc.Write(outFile); outFile.Close(); } } 模板文件要设置为“始终复制”

dotnet NPOI Word文档
阅读更多
DotNet Core 项目 添加Swagger 自动构建接口文档
后端开发
2020-06-08 • 0k

DotNet Core 项目 添加Swagger 自动构建接口文档

1、NuGet引用 Swashbuckle.AspNetCore 2、Startup类中ConfigureServices函数添加代码 #region Swagger public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); #region Swagger services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info { Version = "1.0", Title = "SwaggerDemo API", Description = "SwaggerDemo文档", TermsOfService = "None", Contact = new Swashbuckle.AspNetCore.Swagger.Contact { Name = "SwaggerDemo", Email = "raikay@163.com", Url = "http://www.raikay.cn/" } }); }); #endregion } #endregion 3、启动Http中间件:编辑Configure类 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } #region Swagger app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "SwaggerDemo API V1"); }); #endregion app.UseMvc(); } 4、查看效果 访问网址 http://localhost:5000/swagger/index.html

dotnet swagger .NET Core
阅读更多
使用BaGet搭建自己的Nuget服务器
运维与DevOps
2020-05-17 • 0k

使用BaGet搭建自己的Nuget服务器

一、下载部署BaGet BaGet下载地址:https://github.com/loic-sharma/BaGet 可以自己编译,也可以下载作者提供的Release版本 二、下载安装Nuget Nuget.exe 下载地址:https://dist.nuget.org/win-x86-commandline/latest/nuget.exe Nuget安装后还需要配置环境变量 三、打包Nuget 在项目.csproj目录中打开cmd 或者powershell 并执行:nuget spec 用文本编辑器将上述命令执行完成的.nuspec 文件进行编辑 <?xml version="1.0"?> <package > <metadata> <id>Dongteng</id> <version>1.0.0</version> <title>ceshiceshi</title> <authors>Dongteng</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>dongteng test</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2019</copyright> <tags>Tag1 Tag2</tags> </metadata> </package> 根据实际的需求修改,一般修改id、version、authors、`description等 修改完以上信息后执行命令:nuget pack,进行打包.正常结果如下 也可以使用bat脚本执行 nuget-publish.cmd : @echo off echo *******************clean nupkg******************* del /S *.nupkg del /S *.nuspec echo *******************building******************* dotnet build echo *******************pack nupkg******************* dotnet pack echo *******************publish nupkg******************* dotnet nuget push **/*.nupkg -s http://nuget.raikay.cn/v3/index.json package.nupkg pause 四、发布 运行命令行,将包文件推送到本地nuget服务器中,执行命令:(如果设置了Key,则需要在包名之前添加对应的ApiKey)

NuGet BaGet 包管理
阅读更多
什么是JWT? Json Web Token介绍
后端开发
2020-05-16 • 0k

什么是JWT? Json Web Token介绍

什么是jwt? JWT 英文名是 Json Web Token ,是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,经常用在跨域身份验证。 JWT 以 JSON 对象的形式安全传递信息。因为存在数字签名,因此所传递的信息是安全的。 由三部分组成: Header(头部) Payload(数据) Signature(签名) JWT=头部编码+数据编码+加密(头部编码+数据编码+key) 编码采用base64编码,加密采用头部alg声明编码方式加密 一:头部(Header) JWT 头描述了 JWT 元数据,是一个 JSON 对象,它的格式如下: {"typ":"JWT","alg":"HS256"} 这里的 alg 属性表示签名所使用的算法,JWT 签名默认的算法为 HMAC SHA256 , alg 属性值 HS256 就是 HMAC SHA256 算法。typ 属性表示令牌类型,这里就是 JWT。 Base64编码后是下面这样: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 二:载荷(playload) 有效载荷是 JWT 的主体,同样也是个 JSON 对象。有效载荷包含三个部分: 1、标准注册声明: 标准注册声明不是强制使用是的,但是我建议使用。它一般包括以下内容: iss:jwt的签发者/发行人; sub:主题; aud:接收方; exp:jwt过期时间; nbf:jwt生效时间; iat:签发时间 jti:jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。 2、公共声明: 可以在公共声明添加任何信息,我们一般会在里面添加用户信息和业务信息,但是不建议添加敏感信息,因为公共声明部分可以在客户端解密。 3、私有声明: 私有声明是服务器和客户端共同定义的声明,同样这里不建议添加敏感信息。 下面这个代码段就是定义了一个有效载荷: {"sub":"1234567890","name":"John Doe","admin":true} Base64编码: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9 三:签名(signature) 这个部分主要是确保数据不会被篡改,需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密 c#代码如下:

JWT 单点登录 http
阅读更多
使用docker安装部署gitlab实例
运维与DevOps
2020-04-08 • 0k

使用docker安装部署gitlab实例

安装Gitlab 1、拉取镜像 # gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本 docker pull gitlab/gitlab-ce 2、创建映射目录 mkdir -p /home/gitlab/config #创建config目录 mkdir -p /home/gitlab/logs #创建logs目录 mkdir -p /home/gitlab/data #创建data目录 3、运行镜像 强烈建议80端口不要映射其他端口, http clone 那里生成的地址不带映射端口 docker run -d -p 443:443 -p 80:80 -p 222:22 \ --name gitlab --restart always \ -v /home/gitlab/config:/etc/gitlab \ -v /home/gitlab/logs:/var/log/gitlab \ -v /home/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce 参数说明: 参数名称 简写 参数说明 detach d 后台运行 hostname 指定主机地址,如果有域名可以指向域名 publish p 将容器内部端口向外映射,左边代表宿主机的端口,右边代表容器端口 name 容器名称 restart always 总是重启 volume v 将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录 4、配置 按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机路径:/home/gitlab/config/gitlab.rb)。 # gitlab.rb文件内容默认全是注释 vim /home/gitlab/config/gitlab.rb # 配置http协议所使用的访问地址,不加端口号默认为80 #(我加端口号访问就会失败,最后用默认80端口) external_url 'http://192.168.198.130' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '192.168.198.130' gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口 :wq #保存配置文件并退出 注意事项:external_url 和gitlab_rails这两个ip参数建议固定操作系统的静态不变的IP或说是域名进行配置,假设IP变得的话在GitLab新建项目的时候,生成的IP还是原来的IP,此时就无法推送代码在Gitlab里面

gitlab docker 代码托管
阅读更多
使用Docker部署Apollo一个环境docker-quick-start版
数据与中间件
2020-04-05 • 0k

使用Docker部署Apollo一个环境docker-quick-start版

1、下载Apollo源码 git clone https://github.com/ctripcorp/apollo.git 2、进入docker-quick-start 目录 cd apollo/scripts/docker-quick-start 3、安装启动 docker-compose up 看到下面日志表示已经安装成功 apollo-quick-start | Waiting for config service startup..... apollo-quick-start | Config service started. You may visit http://localhost:8080 for service status now! apollo-quick-start | Waiting for admin service startup. apollo-quick-start | Admin service started apollo-quick-start | ==== starting portal ==== apollo-quick-start | Portal logging file is ./portal/apollo-portal.log apollo-quick-start | Started [237] apollo-quick-start | Waiting for portal startup..... apollo-quick-start | Portal started. You can visit http://localhost:8070 now! 4、基本使用 管理后台: 地址:http://localhost:8070

apollo docker 配置中心
阅读更多
使用Docker部署Apollo多个环境在一台(Linux)服务器
数据与中间件
2020-04-05 • 0k

使用Docker部署Apollo多个环境在一台(Linux)服务器

一、搭建MySql 1、拉取官方镜像 (我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版) docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mysql镜像 docker images # 检查是否拉取成功 2、运行镜像 docker run -p 23306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 参数说明: –name:容器名,此处命名为mysql -e:配置信息,此处配置mysql的root用户的登陆密码 -p:端口映射,此处映射 主机23306端口 到 容器的3306端口 3、创建数据库 根据\apollo\scripts\sql目录下的两个脚本 创建三个数据库 ApolloConfigDBPro : apolloconfigdb.sql ApolloConfigDBDev : apolloconfigdb.sql ApolloPortalDB : apolloportaldb.sql 4、修改值 修改 ApolloPortalDB库中ServerConfig表apollo.portal.envs的值为dev,pro 修改 ApolloConfigDBPro库中ServerConfig表eureka.service.url的值 为http://localhost:8083/eureka/ 二、搭建Apollo 拉取镜像 docker pull idoop/docker-apollo 运行容器 注意 “=” 附近不能有空格 docker run --net="host" --name myapollo -d \ -e PORTAL_DB='jdbc:mysql://192.168.198.128:23306/ApolloPortalDB?characterEncoding=utf8' \ -e PORTAL_DB_USER='root' \ -e PORTAL_DB_PWD='123456' \ -e DEV_DB='jdbc:mysql://192.168.198.128:23306ApolloConfigDBDev?characterEncoding=utf8' \ -e DEV_DB_USER='root' \ -e DEV_DB_PWD='123456' \ -e PRO_DB='jdbc:mysql://192.168.198.128:23306/ApolloConfigDBPro?characterEncoding=utf8' \ -e PRO_DB_USER='root' \ -e PRO_DB_PWD='123456' \ idoop/docker-apollo:latest 时间有点久,等三、五分钟后,访问 http://192.168.198.128:8070/

apollo docker 配置中心
阅读更多
Docker环境安装及基础命令使用
运维与DevOps
2020-04-03 • 0k

Docker环境安装及基础命令使用

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 安装Docker 为yum配置加速 centos默认国外源,安装过程不是很理想 #下载阿里yum源2 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all #清理缓存 yum makecache #生成仓库缓存 安装: 1、安装必要依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 2、添加阿里镜像稳定版仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3、安装docker-ce yum install -y docker-ce docker-ce-cli containerd.io 配置docker加速 创建或修改 daemon.json 文件 修改之后重启docker服务 vim /etc/docker/daemon.json { "registry-mirrors" : [ "http://registry.docker-cn.com", "http://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ], "insecure-registries" : [ "registry.docker-cn.com", "docker.mirrors.ustc.edu.cn" ], "debug" : true, "experimental" : true } 开机启动 systemctl enable docker #开机启动docker 重启 systemctl daemon-reload #加载 systemctl restart docker #重启docker 查看 systemctl status docker #查看docker状态 docker info #查看详细信息 docker version #查看版本 使用Docker 查看已有镜像列表

docker 环境安装 国内源
阅读更多
Typora+Picgo图片自动上传打造Markdown写作神器
工具与效率
2020-03-11 • 0k

Typora+Picgo图片自动上传打造Markdown写作神器

1、Markdown神器:Typora Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、Linux 三个平台的版本,并且由于仍在测试中,是完全免费的。 官网地址:https://www.typora.io/ 2、图床工具:Picgo 将本地图片上传到七牛云、腾讯云COS、GitHub等图床。 3、如何实现Typora图片自动上传 1、在Typora 依次点击 文件 –> 偏好设置 –> 图像 2、点击下载PicGo,填写PicGo启动文件路径 4、PicGo相关设置 PicGo默认安装了几个插件腾讯云、阿里云、七牛云、GitHub等,这里已blog-uploader这个插件为例, 这里收集了一些其他插件:https://github.com/PicGo/Awesome-PicGo 点击 插件设置 –> 搜索插件 –> 安装 点图床设置 –> 设置为默认图床 –> 确定 支持: 拖拽 粘贴板直接粘贴 5、相关错误解决: 如果报错先检查一下picgo设置Server是否开启,端口是否是36677 如果报什么upload文件夹错误,检查一下这个路径是否有权限读写权限C:\Program Files\Typora\upload

markdown typora picgo
阅读更多
Vuepress起步
前端开发
2020-03-11 • 0k

Vuepress起步

1、安装 npm install -g vuepress 如果慢或者安装失败可以用cnpm替换,或者yarn # yarm yarn global add vuepress #cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org #如果已安装请忽略 cnpm install -g vuepress 2、创建项目目录 mkdir vuepress-starter && cd vuepress-starter 3、新建一个 markdown 文件 echo '# Hello VuePress!' > README.md 运行项目 vuepress dev . 4、访问站点 http://localhost:8080/ 初始化项目 npm init -y 执行命令后,项目根目录会出现一个package.json,我们修改scripts节点 "scripts":{ "dev":"vuepress dev docs", "build":"vuepress build docs" } 修改之后: { "name":"vuepress-starter", "version":"1.0.0", "description":"", "main":"index.js", "scripts":{ "dev":"vuepress dev docs", "build":"vuepress build docs" }, "keywords":[ ], "author":"", "license":"ISC" } 创建基本目录

markdown vuepress Vue
阅读更多