我的截图直传工具:613 行 Go,真正干活的只有 40 行

上一篇提过我有个工具叫 alioss-drop:截图想发给 AI 看、或者想要个公网链接,一条命令直传阿里云 OSS、立刻拿到 URL,不用再手动开图床、复制粘贴。今天把它拆开讲讲——尤其是一个让我自己都有点意外的事实。

它解决什么

跟 Claude Code 结对写代码时,我常想把一张截图甩给它看;写文章也常需要图片的公网地址。以前这步是:开图床网站 → 上传 → 复制链接 → 回来粘贴。烦,还打断思路。

alioss-drop 把这串动作压成一步:图片在哪,一条命令传上去,回你一个能直接访问的链接。而且我给它做了 MCP 集成,所以在 Claude Code 里它就是一个工具——AI 自己就能调,我连命令都不用敲。链路很简单:截图存成文件 → MCP 工具 upload_image(路径) → 上传到 OSS(公开读)→ 返回公网 URL。

真正干活的,只有 40 行

整个工具 613 行 Go,分 5 个文件。但你猜真正「上传」那段有多少行?45 行。核心函数就这么点:

func (c *Client) Upload(filename string, reader io.Reader) (string, error) {
    err := c.bucket.PutObject(filename, reader, alioss.ObjectACL(alioss.ACLPublicRead))
    if err != nil {
        return "", fmt.Errorf("upload to oss: %w", err)
    }
    return c.publicURL(filename), nil
}

调一下阿里云 SDK 的 PutObject,设成公开读,拼出 URL,完事。如果只是想要个能跑的 demo,确实 40 行就够了。

那剩下的 570 行在干嘛?

这才是「玩具」和「工具」的区别。剩下的代码全在处理「让别人(和未来的我)敢用」的部分:

  • MCP 协议:让 Claude Code 能直接调它(一个 stdio 上的 JSON-RPC 服务);
  • MIME 嗅探:读文件前 512 字节验真,只放行 jpeg/png/gif/webp——防止把改了后缀的非图片传上去;
  • 大小限制MaxBytesReader 卡 10MB,别让超大文件把内存撑爆;
  • UUID 文件名:避免重名覆盖;
  • 优雅关闭 / CORS / 双模式(http 服务 + mcp):这些「不出错时你根本注意不到」的东西。

最后编译成单文件二进制,零运行时依赖,扔哪都能跑。

我从这学到的

写个能跑的核心,AI 几分钟就帮你生成了。但把那 40 行打磨成一个边界情况都兜住、别人装上就能用的工具,剩下那 90% 的工程量,still 是你的活。

这大概就是 AI 时代独立开发的真相:AI 把「从 0 到能跑」的成本打到接近 0,但「从能跑到能用」那段,才是你的价值所在。

源码开源:github.com/karrychow/alioss-drop


已发布

分类

来自

标签:

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
0
希望看到您的想法,请您发表评论x