正在加载…

Post cover image

Artalk之upgit上传七牛图床改造

2025年8月26日 • 分享

1k 字-

AI大法好,我入门go语言了。

前言

上篇文章说替换了评论系统,真是大言不惭了,待我装完Artalk评论系统,看了看配置项,我就把评论暂时删了。 这套系统就够玩半天的了,图床配置,评论审核,验证码,一项配置就是一套系统,要么用第三方的api,要么自己搭环境。

我开始怀疑我用得着评论嘛,不,我热爱的不是互动,是折腾过程。以下就是Artalk的upgit折腾过程。

安装Artalk

Artalk的安装比较简单,直接docker部署,命令如下:

bash
docker run -d --name artalk -p 8080:8080 -v /data/artalk:/data artalk/artalk:latest

配置Artalk

Artalk需要进容器配置管理员,命令如下:

bash
docker exec -it artalk /bin/bash
artalk admin
# 设置管理员昵称、邮箱、密码

Trae编辑器

Artalk推荐使用upgit上传图床,但是呢,七牛的token有时效性,我在网上搜到了这篇文章 《UPGIT切换其他图床》,讲了自己动手开发源代码以支持七牛秘钥换取token。

一看涉及到改代码,我就有点打退堂鼓,毕竟对于Go语言,我可能也就知道它是一种开发语言了,真正零基础。

但是我一想,我有AI啊。下载upgit源代码,扔进Trae编辑器中,IDE直接提醒我安装Go环境,那个博主后边的语法错误他还排查了一下,AI生成的我基本就没改,直接就用了。

源代码只需要改 main.go 文件就好了。go.modgo.sum 类似于 Python 的 requirements.txt,都是依赖文件。编译前直接 go get 下就可以自动更新这俩文件了。

修改源代码

我去七牛官网看了下SDK,和前边博主的引入包不太一样,我用的这俩:

go
// main.go import 里面加上这俩
import (
    // ... 其他引入
	"github.com/qiniu/go-sdk/v7/storagev2/credentials"
	"github.com/qiniu/go-sdk/v7/storagev2/uptoken"
)

然后在PowerShell中执行以下命令安装依赖:

powershell
go get github.com/qiniu/go-sdk/v7/storagev2/credentials
go get github.com/qiniu/go-sdk/v7/storagev2/uptoken

根据七牛官方示例,我让AI生成了获取token方法,如下:

go
// generateQiniuToken 生成七牛云上传token
func generateQiniuToken(accessKey, secretKey, bucketName string) (string, error) {
	// 创建七牛云认证对象
	mac := credentials.NewCredentials(accessKey, secretKey)
	if mac == nil {
		return "", errors.New("failed to create qiniu auth object")
	}
	bucket := bucketName
	putPolicy, err := uptoken.NewPutPolicy(bucket, time.Now().Add(1*time.Hour))
	if err != nil {
		return "", err
	}
	upToken, err := uptoken.NewSigner(putPolicy, mac).GetUpToken(context.Background())
	if err != nil {
		return "", err
	}
	return upToken, nil
}

然后在 main.go 中调用了这个方法,去搜索 if uploaderId == "s3" { ... },在它下面加上七牛的判断,因为七牛用的通用的上传方法 SimpleHttpUploader,所以原文里面是没有qiniu的分支判断的,咱自己加下。

go
	// 重新定义token
	upToken := ""
	if uploaderId == "qiniu" {
		qiniuconfig, err := xapp.LoadUploaderConfig[map[string]interface{}](uploaderId)
		xlog.AbortErr(err)
		accessKey, ok := qiniuconfig["access_key"].(string)
		if !ok {
			xlog.AbortErr(errors.New("qiniu access_key not found"))
		}
		secretKey, ok := qiniuconfig["secret_key"].(string)
		if !ok {
			xlog.AbortErr(errors.New("qiniu secret_key not found"))
		}
		bucketName, ok := qiniuconfig["bucket_name"].(string)
		if !ok {
			xlog.AbortErr(errors.New("qiniu bucket_name not found"))
		}
		upToken, err = generateQiniuToken(accessKey, secretKey, bucketName)
		xlog.AbortErr(err)
	}

    // 继续在这个方法体里往下写
    uploader = &uploaders.SimpleHttpUploader{Definition: uploaderDef}
    extConfig, err := xapp.LoadUploaderConfig[map[string]interface{}](uploaderId)
    if err == nil {
        //加在这里 七牛需要替换token
        if uploaderId == "qiniu" {
            extConfig["token"] = upToken
        }

        uploader.Config = extConfig
        xlog.GVerbose.Trace("uploader config:")
        xlog.GVerbose.TraceStruct(uploader.Config)
    } else {
        xlog.GVerbose.Trace("no uploader config found")
    }

编译执行文件

最后就是编译成可执行文件了,AI上来就让make,发现执行不了,就推荐直接使用go命令编译了,很流畅。

powershell
# 创建输出目录
mkdir -p .\dist

# 配置代理
go env -w GOPROXY=https://goproxy.cn

# 清理缓存(如果遇到卡住的情况)
go clean -modcache

# 编译Linux版本
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -v -ldflags="-s -w" -o .\dist\upgit_linux_amd64 .

# 编译Windows版本
$env:GOOS="windows"; $env:GOARCH="amd64"; go build -v -ldflags="-s -w" -o .\dist\upgit_windows_amd64.exe .
upgit
Artalk之upgit上传七牛图床改造
在转载或引用本文时,请务必遵守许可协议并注明来源
远山's Avatar

远山

那远山呼唤我,曾千百次走过。

云存储提供商
热门标签
WiFi6
E2633
Mesh
caddy
acme
群辉
RSA
非对称加密
AES
对称加密
Docker
Umami
数据分析
云存储
CDN
七牛云
EdgeOne
S3
本地服务器
Artalk
图床
upgit
静态博客
Valaxy