-
-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
统一的文件接口 #872
Comments
框架有提供针对 "资源( 不知道具体的操作文件的需求是怎样的?如果只是需要能够做到读取文件的二进制数据, 但如果是说像 kotlinx.io 或者 Okio 那样针对文件系统的文件本身的抽象,那的确没有...,如果是这种的可以考虑直接使用 kotlinx.io 或 Okio |
你好,谢谢你的解答。我感觉我可能表述得有问题,造成了误解。我里面的平台指的是机器人对接的平台,例如kook、onebot、qq频道等这样的对接方式。我希望能有一个统一的接口,这样就可以只需写一次代码就可以处理从对接的平台下载文件(或者获取下载地址)和上传并发送文件到对接的平台,这样会方便许多。 |
🤔以图片消息为例,如果要发送一个图片文件,一般来讲各个组件都会支持解析并使用 而对于获取、下载收到的图片消息,的确不够统一,不过它们大多数都围绕着
不过随着更新,接收到的图片元素都会逐步实现类似 对于其他类型的跟文件相关的内容,比如KOOK的文件附件,Telegram的语音音乐、文件附件等,的确没有一个统一的、可用于下载的便捷抽象。 许会考虑提供类似 |
有关于文件操作的部分,我个人觉得可以试着这么实现:
这些只是我个人的一点想法,如果有考虑不周的地方请指正。 |
对于文件下载:作为消息元素之一接收到的文件内容的形式比较有限,大概率是一个ID或URL(目前大部分组件的情况),小概率是完整数据(比如base64,但是还没遇到过这样的)。
不过,如果不考虑大文件的隐患、序列化的信息丢失隐患,提供直接获取二进制数据功能感觉可以考虑 👌,提供某种消息元素的接口,就像 对于文件上传:其实类似于上传、构造独特
我们抽象了
而抽象“文件上传”就有些困难了:
因此对于发送文件消息(图片除外),我们仍倾向于提供独特的消息元素类型(比如 Telegram 组件中的
|
对于文件对象序列化信息丢失以及文件过大的问题,可以使文件对象序列化时退化为一个不包含认证信息,只有获取文件所需的信息(例如是哪个环境的文件、 id 或 url 等)的对象,然后反序列化之后需要使用特定方法才能重新转化为可获取数据的文件对象,等用户真正需要数据调用获取数据的接口时再去与平台对接下载数据。 然后文件上传,可以只提供一个默认的 API,接受各个平台普遍使用的设置,产生一个平台默认实现的 有关于各个平台文件参数不统一的部分,或许可以使用 map ?就像 HTTP 的 Header 一样,在框架里定义一套文件的标准属性,例如 个人意见,可能考虑不周,敬请指教。 |
序列化导致信息丢失的情况,如果一定要携带认证信息(比如里面藏了一个bot),那么退化不可避免,只不过这个退化不可逆,因为如果要作为一个统一的抽象,就不可能预知需要什么东西来恢复它。其次还有一个问题就是消息元素的设计理应都是不可变、无状态且始终如一的,会退化的情况必然会违背这个原则,不过...倒也不是不能接受的违背就是了。因退化而导致无法再获取到其内容的情况可以接受,向用户 抛出异常 来作为提示。但"使用特定方法恢复"这一点感觉就难以抽象并统一了 🤔,这种特定方法是不可揣摩的。
这其实也就是
这其实就是我们最想避免的情况 😞,也是为什么上一条回复中我强调了能够“安全地满足”。Map固然灵活,但它既不安全,也容易出错。比如:
如果想要确保绝对准确的使用Map中的键或值,目前想想办法倒是也有:由组件提供常量值以供使用。但是...这跟直接使用一个具体的强类型就没区别了。 这也是为什么
|
建议描述
我想给机器人开发一个下载、处理文件并上传的功能。但是似乎框架没有提供统一文件处理的接口,而且各个平台对文件的实现也比较独立,对每个平台分别处理也比较费劲。希望能够有一个统一的文件接口,可以用来下载和上传文件。
The text was updated successfully, but these errors were encountered: