正在加载…

Post cover image

Artalk之upgit上传七牛图床改造

2025年8月26日 • 分享

1k 字-

本文最后更新于 1 年前,文中所描述的信息可能已发生改变。

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

远山

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

云存储提供商
热门标签
S3
Silo
MinIO
Docker
电视盒子
AI
Skills
Stitch
Google AI Studio
Trae IDE
claude code
cc-switch
nvidia api
openrouter
ai
coding plan
WiFi6
E2633
Mesh
caddy
acme
群辉
RSA
非对称加密
AES
对称加密
Umami
数据分析
云存储
CDN
七牛云
EdgeOne
本地服务器
Artalk
图床
upgit
静态博客
Valaxy