MrXiaoM/Overflow

关于 `Image` 中 `imageId` 以及本地文件路径的实现

Closed this issue · 4 comments

我稍微了解了一下源码以及LLOneBot那边给到的一些 api 返回数据,我想应该是可以不用拿 url 做 imageId 的。

image 相关 json

"message": [
        {
            "data": {
                "file": "E9FEA919E34659506AF549E04A6BCCFB.jpg",
                "subType": 1,
                "url": "https://gchat.qpic.cn/gchatpic_new/xxxxxxxx/735228141-2874266716-E9FEA919E34659506AF549E04A6BCCFB/0?term=255&is_origin=0",
                "file_size": "9773"
            },
            "type": "image"
        }
    ]

这里可以看到 file 是可以作为 imageId,另外一个可以作为 imageId 的原因是 LLOneBot 的扩展 api /get_file 是可以通过该值拿到。这里主要还是因为想要通过扩展的 api 拿到本地文件路径,以缓解客户端自行下载管理图片缓存的复杂度。

而原先 url 可以储存在内部实现类的字段里,query的时候做一个类型转换或者判断去拿 url 字段。

另外想要拿到本地文件路径我想有以下几种方式:

  1. 调用 RemoteBot 提供的 api executeAction 做查询
  2. 有一个类似 OverflowAPI 一样的类提供 get_file api ,或者是有一个暴露 OneBot Client 实现的接口。因为我理解第一种方式是一个非Overflow维护到的额外 api,本身 Client 提供了方法的还是希望能够拿到。
  3. 整合进 Image 实现类,提供一个类似 RemoteXXX 的接口类,暴露 getFile 获取本地路径

其中1是有的,但感觉不好用不够集成。

个人来说,2中的暴露 OneBot Client 实现接口和3都希望有。
如果大体没什么问题我也可以提一个pr看看,毕竟我自己肯定会去改一份自用的。

加了点 SPI,应该够用来扩展的了

这个 /get_file API 是获取“群文件或私聊文件”而不是图片文件吧,应该不能用于获取图片链接。
这个 API 我之前已经加到 Onebot 模块的 Bot.kt 了,在最后面的 extGetFile,并用于群文件获取下载链接

/get_image 倒是可以

这个 /get_file API 是获取“群文件或私聊文件”而不是图片文件吧,应该不能用于获取图片链接。 这个 API 我之前已经加到 Onebot 模块的 Bot.kt 了,在最后面的 extGetFile,并用于群文件获取下载链接

/get_image 倒是可以

是,但是我昨天试了一下,其实获取图片是没问题的(LLOneBot来说),/get_image 要是能够给到本地路径其实也ok的

最近都没空看,还是先close了