Rust 版本文章上传命令行工具

这个工具使用Rust开发,仅实现了上传文章功能,使用 GUI 桌面开发。 该工具使用的库为 nwg,即 native-windows-gui 库,该库支持老的 Windows GUI。 这应该算是一个半成品,这是 Rust 实现的一个桌面上传文章工具。它只有上传功能,之所以会这样,是因为后续的开发重心都放在go版本实现上。 不过这也有一定的价值,首先就是它实现了图形桌面,这个可以学会如何实现一个窗口,显示输入框和按钮,如何布局。然后呢,可以在Rust中使用HTTP上传文件,这也是一个非常棒的技能点。 以后有精力了,可以扩展完善一下。 项目地址 https://gitee.com/littletow/upart-rs

2023-08-21 · 1 min · Eagle

Go 版本文章上传命令行工具

这是 Golang 实现的上传文章以及管理文章的一个命令行工具。 项目地址 https://gitee.com/littletow/upart-go 实现一个上传文章的命令行工具 这是一个最初的版本,使用 flag 和 ini 来实现文章上传功能。使用 flag 来解析命令行参数,使用 Ini 配置文件,记录识别码,以及 token。记录 token 的原因是因为每次启动命令行,都需要重新获取 token,为了减少 token 获取次数,在获取到 token 后,同时存储到 Ini 配置文件中。每次命令行启动,优先查看配置文件中的 token。 开发这个工具主要有以下几个技术要点: 从命令行获取参数 从配置文件中读取参数 读取文件内容 请求后端接口 我们通过分析后,需要定义以下几个参数: title 标题 keyword 关键字 filename MD 文件名 ispub 是否公开 islock 是否加锁 使用 Go 代码定义参数和结构体 var ( title string keyword string filename string ispub int // 1 pub islock int // 1 lock ) func init() { flag.StringVar(&title, "b", "", "文章题目") flag.StringVar(&keyword, "k", "", "文章关键字") flag.StringVar(&filename, "f", "", "MD文件") flag.IntVar(&islock, "l", 0, "是否加锁") flag.IntVar(&ispub, "p", 0, "是否开放") } func main(){ flag.Parse() } init() 在 main 函数前调用。需要在 main 函数中调用 flag.Parse(),这一步非常关键。之后就可以使用变量了。 ...

2024-09-21 · 3 min · Eagle

上传工具实现上传文章命令

上传文章 定义上传文章的 command,并将 command 添加到 Root 中。 func init() { rootCmd.AddCommand(upCmd) } var upCmd = &cobra.Command{ Use: "upload", Short: "上传文章,可在豆子碎片小程序中查看。", Long: `上传文章,可在豆子碎片小程序中查看。参数依次为题目,关键字,Markdown文件,是否公开,是否加锁。 参数题目,关键字,Markdown文件必填,是否公开,是否加锁选填,默认为否。 例如:gart upload 上传示例1 命令行,工具 ./example.md `, Args: cobra.RangeArgs(3, 5), Run: func(cmd *cobra.Command, args []string) { var ( title string keyword string filename string ispub int islock int ) title = args[0] keyword = args[1] filename = args[2] l := len(args) switch l { case 4: ispub = utils.Str2Int(args[3]) case 5: ispub = utils.Str2Int(args[3]) islock = utils.Str2Int(args[4]) } fmt.Println("上传参数如下:") var isPubStr string = "否" var isLockStr string = "否" if ispub == 1 { isPubStr = "是" } if islock == 1 { isLockStr = "是" } t := table.NewWriter() t.SetOutputMirror(os.Stdout) t.AppendHeader(table.Row{"题目", "关键字", "文件名称", "是否公开", "是否加锁"}) t.AppendRows([]table.Row{ {title, keyword, filename, isPubStr, isLockStr}, }) t.AppendSeparator() t.Render() err := service.UploadArt(token, title, keyword, filename, ispub, islock) if err != nil { fmt.Println("上传发生错误,", err) } else { fmt.Println("上传成功") } }, } 在上面的实现中,使用了 cobra 参数约束函数,Args: cobra.RangeArgs(3, 5),,保证参数最少 3 个,最多不能超过 5 个。这完全满足我的需求。 ...

2024-09-23 · 1 min · Eagle

上传工具使用Cobra实现添加更多的命令

添加更多的命令 对于添加更多的命令,使用 flag,就有点麻烦了,这次我们使用一个更高级的库 cobra。同时,我们使用 viper 替换 ini 库,这个库可以读取多种格式的配置文件,可以读取环境变量。 要实现的功能如下: 上传文章 文章删除 更新文章标题 更新文章关键字 更新文章内容 文章公开开关 文章加锁开关 根据标题查找文章 根据关键字查询文章 现在使用 cobra 实现上面的命令。 首先,我想要的效果如下: 上传文章 gart upload title keyword filename ispub islock 删除文章 gart remove uuid 更新文章标题 gart updatetitle uuid title 更新文章关键字 gart updatekeyword uuid keyword 更新文章内容 gart updatecontent uuid filename 更新文章公开或不公开 gart updatepub uuid ispub 更新文章加锁或不加锁 gart updatelock uuid islock 根据标题或关键字查找文章 gart search content 上面的 upload,remove,updatetitle,updatekeyword 等,在 cobra 中都是命令。title keyword 等都是参数。 ...

2024-09-22 · 2 min · Eagle

上传工具实现查询文章

查询文章 当我们上传了文章之后,肯定希望能够查询我们上传的文章了,查询文章根据用户输入的内容,后台进行文章的标题和关键字进行匹配。然后返回查询到的数据。后台限制最多返回 20 条记录,这是为了服务器性能综合考虑的。如果用户查找的内容,不在返回的记录中,请输入更多内容,进行更精确的匹配。 func init() { rootCmd.AddCommand(qCmd) } var qCmd = &cobra.Command{ Use: "search", Short: "查找文章,最多返回20条记录。", Long: `查找文章, 根据文章的标题和关键字匹配查询,最多返回20条记录。可以输入更多的内容进行精确查找。`, Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { content := args[0] list, err := service.SearchArt(token, content) if err != nil { fmt.Println("查询发生错误,", err) } else { n := len(list) if n > 0 { var ( cts string uts string ispub string = "否" islock string = "否" ) t := table.NewWriter() t.SetOutputMirror(os.Stdout) t.AppendHeader(table.Row{"UUID", "题目", "关键字", "是否公开", "是否加锁", "创建时间", "修改时间"}) for _, v := range list { cts = utils.TS2Str(v.Createtime) uts = utils.TS2Str(v.Updatetime) if v.IsPub == 1 { ispub = "是" } if v.IsLock == 1 { islock = "是" } t.AppendRows([]table.Row{ {v.Uuid, v.Title, v.Keyword, ispub, islock, cts, uts}, }) t.AppendSeparator() } t.Render() } else { fmt.Println("未找到记录,尝试更换内容试试。") } } }, } 代码的组织架构和上传的差不多。都需要先定义命令,然后添加到 root 命令中。这里的输出结果使用美化的 table 显示。当查询到内容后,就可以使用结果中的 UUID 进行文章的管理维护了。

2024-09-24 · 1 min · Eagle

上传工具实现删除文章

删除文章 当上传完文章之后,由于各种原因,会有删除文章的需求。今天我们实现了删除文章的功能。删除文章,需要先知道文章的 UUID,这个可以通过上一节介绍的搜索文章查到。 func init() { rootCmd.AddCommand(rmCmd) } var rmCmd = &cobra.Command{ Use: "remove", Short: "删除文章", Long: `删除文章, 需要先获取文章的UUID。`, Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { uuid := args[0] err := service.RemoveArt(token, uuid) if err != nil { fmt.Println("删除发生错误,", err) } else { fmt.Println("删除成功") } }, } 实现比较简单,当删除后,可以看命令行输出,也可以去小程序中查看还有没有该篇文章。

2024-09-25 · 1 min · Eagle

上传工具实现更新功能

更新文章标题 有的时候,我们上传完文章之后,会发现我们的文章标题不合适,或想更好的描述文章内容。如果没有这个接口,我们需要删除文章,然后再重新上传。所以,我们实现这个功能,方便我们修改文章标题。 修改文章标题,我打算使用的命令格式如下: gart title uuid newtitle 其中,紧挨着 gart 的 title 是命令,表示要更新文章标题,uuid 是文章的主键,可以查询识别是哪篇文章,newtitle 就是要修改的文章标题了。 实现的代码如下: func init() { rootCmd.AddCommand(uptTitleCmd) } var uptTitleCmd = &cobra.Command{ Use: "title", Short: "更新文章标题,参数需要UUID,新的标题。", Long: `更新文章标题,参数需要UUID,新的标题,需要先获取文章的UUID。`, Args: cobra.MinimumNArgs(2), Run: func(cmd *cobra.Command, args []string) { uuid := args[0] title := args[1] uar := service.UpdateArtReq{ Uuid: uuid, Title: title, UptType: 1, } err := service.UpdateArt(token, &uar) if err != nil { fmt.Println("更新标题发生错误,", err) } else { fmt.Println("更新成功") } }, } 实现比较简单,除了看命令行输出,还可以去小程序中查看实际结果。 ...

2024-09-26 · 3 min · Eagle

上传工具实现获取有效城市功能

如何获取有效城市? 命令行工具提供了同城访问文章功能。在限制文章同城时,需要提供城市信息,为此,我们需要获取正确的城市名称。 下载最新版本的命令行工具。 先获取有效省份名称,如果是自治区或者直辖市,下面的命令也都支持。 gart area 1 然后获取有效城市名称,例如我查询河南省的有效城市。 gart area 2 河南省 注意:以上数据来源参考微信地址信息,精确到地级市或同等行政级别。 如何限制文章同城访问? 命令行工具提供了限制文章同城访问功能。 下载最新版本的命令行工具。 需要先使用 area 命令获取有效城市,然后使用下面命令限制文章访问。 gart city uuid 城市名称 注意:更新成功后,可以在豆子碎片小程序中进行体验。

2024-10-13 · 1 min · Eagle

用户如何上传和更新Markdown文章?

首先,下载最新版本的命令行工具。下载地址: https://gitee.com/littletow/upart-go/releases/download/v2.1.0/upart-go.zip 或者使用源码自行编译,源码地址: https://gitee.com/littletow/upart-go/archive/refs/tags/v2.1.0.zip 如何上传豆子碎片文章? 命令行工具提供了上传文章的功能。你需要先使用 Markdown 格式写好内容。 上传文章使用 upload 命令,后面跟参数题目,关键字,Markdown 文件,是否公开,是否加锁。其中前 3 项必填。 gart upload title keyword content ispub islock 注意:上传完成后,可以在豆子碎片小程序中进行体验。 如何更新维护豆子碎片文章? 命令行工具提供了维护文章的功能。已经上传的文章可以更新标题、关键字、文件内容、是否公开、是否加锁、限制同城访问、还可以强制公开。 相关的命令可通过下面的命令查看 gart --help 注意:更新完成后,可以在豆子碎片小程序中进行体验。

2024-10-15 · 1 min · Eagle