使用kratos自带http transport实现文件下载上传功能,并且可以使用中间件。文件的下载接口可以使用proto定义,上传目前还未找到完美方法,为了统一,采用不定义在proto中定义,自行在server中实现。为什么上传接口不能使用proto定义?上传接口实际上可以使用proto定义,但是在解析入参时是不能解析上传的字节类型,入参的Content-Type类型只支持: x-www-form-urlencoded、json、xml、proto、yaml,而上传文件我希望以只读字节流readCloser的方式,这样可以方便使用io.Copy()的方式实现上传,而不是将文件数据转换成[]byte进行传输看一段官方的实现方式原代码 · GitHub,已简化。func downloadFile(ctx http.Context) error { f := excelize.NewFile() return f.Write(ctx.Response()) } func main() { var opts = []http.ServerOption{
准备工作一台拥有公网 IP 的服务器一个域名服务器准备工作安装 Golang ,版本最好为1.20以上安装Caddy2进入网站了解安装方式:caddy2中文网Caddyfile配置caddy的作用仅用于申请tls证书证书目录:/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.comexample.com { tls 邮箱 respond "Hello, world!" } }安装 tailscalecurl -fsSL https://tailscale.com/install.sh | sh启动并登录tailscale up安装 derper 服务go install tailscale.com/cmd/derper@main配置derper service[Unit] Description=derper service After=network.target StartLimitIntervalSec=0 [
openwrt 是针对于嵌入式设备的精简版 Linux 系统。所以一些常规的 Linux 服务都没有,比如 systemd 等。openwrt 是通过 init.d 来管理服务的。所有的服务都在 /etc/init.d 目录下。对某个服务进行操作也很方便,例如对 network 服务:# 启动 network /etc/init.d/network start # 重启 network /etc/init.d/network restart # 停止 network /etc/init.d/network stop如果需要某个服务开机自启动,可以 enable:/etc/init.d/frp enable会自动在 /etc/rc.d/ 目录下建立一个链接指向 /etc/init.d 下的对应服务,如:S95frp。S95 表示此服务的启动顺序,下面会做介绍。基本结构script 配置文件基本结构如下:#!/bin/sh /etc/rc.common USE_PROCD=1 START=95 STOP=15 start_service() { } service_triggers
代码建成两个分支,当以后需要修改BUG或升级功能的时候只修改一份代码,然后和另一个分支合并,但是合并的时候需要忽略各自私有的代码文件,上网查了下资料还真的可以这样做,便尝试测试一下,如下操作在代码根目录创建.gitattributes文件,里面配置合并代码时需要忽略的文件:文件1 merge=ours 文件2 merge=oursgit配置文件添加merge.ours.driver true,执行以下命令git config --global merge.ours.driver true切换到需要修改的分支修改代码、提交代码,然后切换到需要和其他分支合并的分支,执行合并操作git merge <分支名>结果却没有达到自己的预期,不需要合并的文件还是合并了,看了几篇网上的资料基本都是一样的教程,很是令人失望,最后看到一篇文章说,只有当前分支里面需要或略合并的文件提交记录需要比被合并的分支的那个文件要新才能不被合并。这真是个大坑,好多文章都没有说明…所以合并之前要在当前分支修改下然后提交再合并才行,那我不需要修改这个文件怎么办?只有修改下注释内容喽,加个空格什么的,没办法呀。这
在main分支为主分支,提供给用户的正式版本dev分支,日常开发分支# 从main分支创建dev分支 git switch -b dev main将dev分支发布到main分支git switch main # 切换到main分支 git merge --no-ff dev # 将在main分支生成一个新节点,然后将dev分支合并到新节点上,是main分支保持主干临时分支:部署即主(main)、开发(dev)、功能(feature)、预发布即测试(release)、修补(fixbug)、紧急修复(hotfix)Type的类别说明:feat: 添加新特性fix: 修复bugdocs: 仅仅修改了文档style: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑refactor: 代码重构,没有加新功能或者修复bugperf: 增加代码进行性能测试test: 增加测试用例chore: 改变构建流程、或者增加依赖库、工具等都是临时的,使用完后,应该删除,是常用分支只有main分支和dev分支# 创建一个功能分支 git switch -b feature-x dev # 开发完后合并分