> 技术文档 > ⭐基于Github搭建简易图床,让本地图片轻松转外链UrPicLink工具开箱即用!

⭐基于Github搭建简易图床,让本地图片轻松转外链UrPicLink工具开箱即用!


最近在整理以前的项目,之前为了不使用付费的云存储服务想到了两种方案:

  • 服务器内部存储,nginx做转发得外链形式

  • 利用Github或Gitee等,搭建图床

这里正是我之前项目用到的思路,现如今我把它抽出成为一个外链工具开源出来,希望对大家也有所帮助。

代码实现思路在仓库里`~

如果你支持我 可以帮我点一个star或者follow!感恩Thanks!!

⭐Github Repo: 仓库地址详情

UrPicBed - GitHub图床服务

UrPicBed是一个基于Golang开发的图片上传服务,支持将图片上传到GitHub仓库并返回外链链接。通过这种方式,你可以轻松地将本地图片转换为可分享的网络链接。

功能特性

  • 🖼️ 支持上传图片文件(JPG、PNG、GIF、WebP、BMP)

  • 📝 支持上传Base64编码的图片

  • 🔄 自动负载均衡到多个GitHub仓库

  • 🐳 Docker一键部署

  • 🔧 灵活的配置文件

  • 🌐 跨域支持

  • 📊 健康检查接口

    快速开始

    使用Docker Compose(推荐)

    1. 克隆项目并进入目录:

    
    

    cd UrPicBed

    1. 修改配置文件 config/config.yaml

    
    

    server: port: 8080 host: \"0.0.0.0\" github: commit-url-list: - \"https://api.github.com/repos/你的用户名/仓库名1/contents/\" - \"https://api.github.com/repos/你的用户名/仓库名2/contents/\" authorization: \"Bearer 你的GitHub_TOKEN\" accept: \"application/vnd.github+json\" api-version: \"2022-11-28\"

    1. 启动服务:

    
    

    docker-compose up -d

    1. 访问健康检查:

    
    

    curl http://localhost:8080/health

    手动构建

    1. 安装Go 1.21+

    2. 下载依赖:

    
    

    go mod download

    1. 构建项目:

    
    

    go build -o urpicbed .

    1. 运行服务:

    
    

    ./urpicbed

    API文档

    健康检查

    GET /health

    检查服务状态

    响应示例:

    
    

    { \"success\": true, \"message\": \"服务运行正常\" }

    上传Base64图片

    POST /api/v1/upload/base64

    请求体:

    
    

    { \"base64\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==\", \"mime\": \"image/png\" }

    响应示例:

    
    

    { \"success\": true, \"message\": \"上传成功\", \"data\": \"https://raw.githubusercontent.com/用户名/仓库名/main/1703123456.png\" }

    上传图片文件

    POST /api/v1/upload/file

    请求体: multipart/form-data

    • file: 图片文件(支持JPG、PNG、GIF、WebP、BMP,最大10MB)

      响应示例:

      
      

      { \"success\": true, \"message\": \"上传成功\", \"data\": \"https://raw.githubusercontent.com/用户名/仓库名/main/1703123456.jpg\" }

      配置说明

      GitHub配置

      • commit-url-list: GitHub仓库的API URL列表,支持多个仓库实现负载均衡

      • authorization: GitHub个人访问令牌(Personal Access Token)

      • accept: GitHub API的Accept头

      • api-version: GitHub API版本

        服务器配置

        • port: 服务端口

        • host: 服务主机地址

          获取GitHub Token

          1. 访问 GitHub Settings > Developer settings > Personal access tokens

          2. 点击 \"Generate new token (classic)\"

          3. 选择权限:

            1. repo (完整的仓库访问权限)

          4. 生成并复制Token

          5. 在配置文件中使用:Bearer YOUR_TOKEN

            创建GitHub仓库

            1. 在GitHub上创建新的公开仓库

            2. 仓库名称建议格式:picbed-01, picbed-02

            3. 将仓库URL添加到配置文件的 commit-url-list

              使用示例

              使用curl上传Base64图片

              
              

              curl -X POST http://localhost:8080/api/v1/upload/base64 \\ -H \"Content-Type: application/json\" \\ -d \'{ \"base64\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==\", \"mime\": \"image/png\" }\'

              使用curl上传图片文件

              
              

              curl -X POST http://localhost:8080/api/v1/upload/file \\ -F \"file=@/path/to/your/image.jpg\"

              使用JavaScript上传

              
              

              // 上传Base64图片 async function uploadBase64(base64Data, mimeType) { const response = await fetch(\'http://localhost:8080/api/v1/upload/base64\', { method: \'POST\', headers: { \'Content-Type\': \'application/json\', }, body: JSON.stringify({ base64: base64Data, mime: mimeType }) }); return await response.json(); } // 上传文件 async function uploadFile(file) { const formData = new FormData(); formData.append(\'file\', file); const response = await fetch(\'http://localhost:8080/api/v1/upload/file\', { method: \'POST\', body: formData }); return await response.json(); }

              注意事项

              1. GitHub Token安全: 请妥善保管你的GitHub Token,不要提交到代码仓库

              2. 仓库权限: 确保GitHub Token有对应仓库的写入权限

              3. 文件大小: 单个文件最大支持10MB

              4. 文件类型: 只支持图片文件格式

              5. 负载均衡: 系统会随机选择仓库进行上传,实现负载均衡

                故障排除

                常见错误

                1. 401 Unauthorized: GitHub Token无效或过期

                2. 403 Forbidden: Token权限不足

                3. 404 Not Found: 仓库URL错误或仓库不存在

                4. 413 Payload Too Large: 文件超过10MB限制

                  日志查看

                  
                  

                  # 查看Docker容器日志 docker-compose logs -f urpicbed # 查看应用日志 docker logs -f urpicbed

                  许可证

                  MIT License