目录
本文发布于 2年前,其中的信息可能已发生变化,请结合实际情况参考。

免费图床API搭建教程

博客需要图片,但图床服务总是要花钱?今天教你自己搭建一个免费的图床API! 📸✨

为什么需要自己的图床?

  • 第三方图床不稳定,随时可能跑路
  • 免费图床有容量和流量限制
  • 自己搭建完全可控,数据安全
  • 可以自定义API接口

方案选择

方案一:使用 GitHub 作为存储

利用 GitHub 的 raw 文件访问作为图床,配合 jsDelivr CDN 加速。

方案二:使用 Cloudflare R2

Cloudflare R2 提供免费的存储空间,且没有出口流量费用。

方案三:自建对象存储

使用 MinIO 搭建自己的 S3 兼容对象存储。

本文我们选择方案一,最简单且完全免费!

搭建步骤

第一步:创建 GitHub 仓库

bash
# 创建一个公开仓库用于存储图片
git init image-hosting
cd image-hosting
echo "# Image Hosting" > README.md
git add .
git commit -m "init"
git remote add origin https://github.com/yourname/image-hosting.git
git push -u origin main

第二步:编写上传 API

使用 Cloudflare Workers 搭建上传接口:

javascript
export default {
  async fetch(request, env) {
    if (request.method !== 'POST') {
      return new Response('Method Not Allowed', { status: 405 });
    }

    const formData = await request.formData();
    const file = formData.get('image');

    if (!file) {
      return new Response('No file uploaded', { status: 400 });
    }

    // 生成文件名
    const ext = file.name.split('.').pop();
    const filename = `${Date.now()}.${ext}`;

    // 上传到 GitHub
    const content = await file.arrayBuffer();
    const base64 = btoa(String.fromCharCode(...new Uint8Array(content)));

    const response = await fetch(
      `https://api.github.com/repos/${env.REPO}/contents/images/${filename}`,
      {
        method: 'PUT',
        headers: {
          'Authorization': `token ${env.GITHUB_TOKEN}`,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          message: `upload ${filename}`,
          content: base64,
        }),
      }
    );

    return new Response(JSON.stringify({
      success: true,
      url: `https://cdn.jsdelivr.net/gh/${env.REPO}/images/${filename}`
    }), {
      headers: { 'Content-Type': 'application/json' }
    });
  }
};

图床教程

第三步:部署到 Cloudflare

bash
# 安装 Wrangler CLI
npm install -g wrangler

# 登录
wrangler login

# 部署
wrangler deploy

第四步:配置环境变量

在 Cloudflare Dashboard 中设置:

  • REPO - 你的仓库名,如 yourname/image-hosting
  • GITHUB_TOKEN - GitHub Personal Access Token

使用方法

bash
# 上传图片
curl -X POST https://your-worker.workers.dev/   -F "image=@photo.jpg"

# 返回结果
# {"success": true, "url": "https://cdn.jsdelivr.net/gh/..."}

注意事项

  • GitHub 单文件限制 100MB
  • jsDelivr CDN 有缓存,更新图片可能需要刷新
  • 建议上传前压缩图片
  • GitHub Token 要妅善保管

总结

自建免费图床其实很简单,利用 GitHub + Cloudflare Workers 就能实现。这个方案完全免费,适合个人博客使用。如果你需要更大的存储空间,可以考虑 Cloudflare R2。希望这篇教程对大家有帮助~