三周前,开发者Harish收到一条意料之外的通知:一个从未交流过的陌生人,给他的开源项目提了个Pull Request。这个人fork了代码库,翻遍了issue列表,挑了一个作者自己拖了好几周没动的任务,直接做完了——测试写了,设计决策文档化了,边界情况也处理了。
这个功能叫devpub upload,一个本该在项目第一天就存在的命令。之所以一直没做,是因为它背后的Forem API根本不支持图片上传。装个新版本,跑一条命令,终端里就能看到图片上传结果和对应的URL,再也不用打开浏览器、拖拽图片、复制链接那一套流程了。
![]()
为什么这个功能拖了三周?
Forem API V1没有图片上传端点。你可以在文章frontmatter里设置封面图,但前提是那张图已经存在于某个URL上——API本身没法帮你生成这个URL。作者当时提了个issue,备注写着"这需要逆向工程web编辑器的上传机制",然后就转去做别的功能了。
Harish没有绕开这个问题。他研究后发现,Dev.to的web编辑器实际上是把图片上传到/image_uploads端点,用的是multipart表单提交,跟普通文件上传一样。但关键区别在于:这个端点不认API key,它认的是浏览器会话。
解决方案:多两个凭证
所以devpub需要在你已有的API key之外,再额外配置两个凭证,存放在.devpub/.env文件里(init时默认会被gitignore):一个是DEVPUB_SESSION_COOKIE,一个是DEVPUB_CSRF_TOKEN。配置好之后,一条命令就能搞定单张或多张图片上传,还能直接输出带Markdown格式的引用代码,粘贴进文章就能用。
作者自己最常用的是--markdown参数:本地写文章时用占位,最后跑一条devpub upload figures/*.png --markdown,把输出直接替换掉本地引用就行。这个被搁置了三周的功能,最终由一个陌生人的PR落地——有时候,开源社区的速度就是这么不讲道理。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.