编写程序,读取图片路径 => 文件内容转换成base64 => 上传文件 => 返回文件url
测试APIGitee API 文档
Response ClassPOST :https://gitee.com/api/v5/repos/{owner}/{repo}/contents/{path}
"root": "commit": "sha": string "author": string "committer": string "message": string "tree": string "parents": string "content": "name": string "path": string "size": string "sha": string "type": string "url": string "html_url": string "download_url": string "_links": stringParameters
Parameter | Value | Description | Type | Data Type |
---|---|---|---|---|
access_token | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 用户授权码 | formData | string |
owner* | luoxian1011 | 仓库所属空间地址(企业、组织或个人的地址path) | path | string |
repo* | pictures | 仓库路径(path) | path | string |
path* | pic.test4 | 文件的路径 | path | string |
content* | /9j/4AAQSkZJRgABAQAAAQABA... | 文件内容, 要用 base64 编码 | formData | string |
message* | pic.test4 | 提交信息 | formData | string |
branch | master | 分支名称。默认为仓库对默认分支 | formData | string |
committer[name] | Committer的名字,默认为当前用户的名字 | formData | string | |
committer[email] | Committer的邮箱,默认为当前用户的邮箱 | formData | string | |
author[name] | Author的名字,默认为当前用户的名字 | formData | string | |
author[email] | Author的邮箱,默认为当前用户的邮箱 | formData | string |
...
go代码-upPicv2package main import ( "bytes" "encoding/base64" "encoding/json" "fmt" "io" "net/http" "os" "path/filepath" "strings" "time" ) var ( timestemp = "" // 时间标签 client = &http.Client{} // 创建一个客户端 apiUrl = "https://gitee.com/api/v5/repos/" // Request URL contentType = "application/json;charset=UTF-8" // 定义网络文件的类型和网页的编码 ) type GiteeResponse struct { Message string `json:"message"` // 请求失败的消息 Content map[string]interface{} `json:"content"` // 请求成功的内容 Commit map[string]interface{} `json:"commit"` // 请求成功的commit } type GiteeRequest struct { Access_token string `json:"access_token"` // 用户授权码 Owner string `json:"owner"` // 仓库所属空间地址(企业、组织或个人的地址path) Repo string `json:"repo"` // 仓库路径(path) Branch string `json:"branch"` // 分支名称。默认为仓库对默认分支 Path string `json:"path"` // 文件的路径(目录+文件名,这里我默认目录为空,文件直接放在仓库根目录) Content string `json:"content"` // 文件内容, 要用 base64 编码 Message string `json:"message"` // 提交信息 } func (g *GiteeRequest) putPics(picSlice []string) { // 遍历文件列表 for _, v := range picSlice { // 上传文件,返回文件url g.postOne(v) } } func (g *GiteeRequest) postOne(pic string) { // 读取文件 fileByte, err := os.ReadFile(pic) if err != nil { fmt.Println("打开文件失败:", err) return } // content "base64编码后的字符串" g.Content = base64.StdEncoding.EncodeToString(fileByte) // Path "上传文件路径" if g.Path == "" { g.Path = filepath.Base(pic) } else { g.Path = strings.Trim(g.Path, "/") + "/" + filepath.Base(pic) } // message "Upload 文件名 by upPic" timestemp = time.Now().Format("2006-01-02 15:04:05") g.Message = "Upload " + g.Path + " by upPic - " + timestemp // url "https://gitee.com/api/v5/repos/luoxian1011/pictures/contents/pic.test3" postUrl := apiUrl + g.Owner + "/" + g.Repo + "/contents/" + g.Path // 序列化请求参数 data, err := json.Marshal(g) if err != nil { fmt.Println("请求数据序列化失败:", err) return } // 路径置空 -- // 处理的小bug,因为path没有置空,多文件时会将前面的文件名更改为前缀路径,上传显示成功,实际成功了一个寂寞(给文件夹做了个提交),Content也为nil g.Path = "" // 开始上传文件 response, err := client.Post(postUrl, contentType, bytes.NewReader(data)) if err != nil { fmt.Println("上传文件失败:", err) return } body, err := io.ReadAll(response.Body) if err != nil { fmt.Println("读取响应失败! 响应码:", response.StatusCode, err) return } defer response.Body.Close() // 关闭 // 如果状态码不是200,就是响应错误 if response.StatusCode != 201 { fmt.Println("请求失败! 响应码:", response.StatusCode, string(body)) return } // 序列化响应体 var giteeResponse GiteeResponse err = json.Unmarshal(body, &giteeResponse) if err != nil { fmt.Println("序列化响应体失败:", err) } // https://gitee.com/luoxian1011/pictures/raw/master/pic.test fmt.Println("Upload Success:") // 输出文件url fmt.Println(giteeResponse.Content["download_url"]) } func main() { // gitee pic // 命令行参数: 从第五个参数开始传入文件路径 argsLen := len(os.Args) if argsLen < 6 { fmt.Println("参数输入有误") fmt.Println("Usage: upPic.exe access_token owner repo branch path file...") return } // 创建请求结构体 giteeRequest := &GiteeRequest{ Access_token: os.Args[1], Owner: os.Args[2], Repo: os.Args[3], Branch: os.Args[4], Path: os.Args[5], } // 拿到文件路径切片 picSlice := os.Args[6:] // 上传图片 giteeRequest.putPics(picSlice) }typora - Custom Command
- 上传服务:Custom Command
- 命令:"D:\GoProject\test\upPic.exe" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx luoxian1011 pictures master ""
验证图片上传选项:
评论列表