ExternalResource

interface ExternalResource

一个不可变的外部资源. 仅包含资源内容, 大小, 文件类型, 校验值而不包含文件名, 文件位置等. 外部资源有可能是一个文件, 也有可能只存在于内存, 或者以任意其他方式实现.

ExternalResource 在创建之后就应该保持其属性的不变, 即任何时候获取其属性都应该得到相同结果, 任何时候打开流都得到的一样的数据.

创建

释放

ExternalResource 创建时就可能会打开一个文件 (如使用 File.toExternalResource). 类似于 InputStream, ExternalResource 需要被 close.

自 2.7 起, 每个 mirai 内置的 ExternalResource 实现都有引用跟踪, 当 ExternalResource 被 GC 后会执行被动释放, 但是该策略并不代表不需要手动 close.

实现 ExternalResource

可以自行实现 ExternalResource. 但通常上述创建方法已足够使用.

实现时需保持 ExternalResource 在构造后就不可变, 并且所有属性都总是返回一个固定值.

See also

Types

Companion
Link copied to clipboard
object Companion

Functions

calculateResourceId
Link copied to clipboard
open fun calculateResourceId(): String
inputStream
Link copied to clipboard
abstract fun inputStream(): <ERROR CLASS>

打开 InputStream. 在返回的 InputStream 被 InputStream.close 前无法再次打开流.

toAutoCloseable
Link copied to clipboard
open fun toAutoCloseable(): ExternalResource

创建一个在 使用一次 后就会自动 close 的 ExternalResource.

Properties

closed
Link copied to clipboard
abstract val closed: Deferred<Unit>

当 close 时会 CompletableDeferred.completeDeferred.

formatName
Link copied to clipboard
abstract val formatName: String

文件格式,如 "png", "amr". 当无法自动识别格式时为 DEFAULT_FORMAT_NAME.

isAutoClose
Link copied to clipboard
open val isAutoClose: Boolean

是否在 使用一次 后自动 close.

md5
Link copied to clipboard
abstract val md5: ByteArray

文件内容 MD5. 16 bytes

origin
Link copied to clipboard
open val origin: Any?

ExternalResource 的数据来源, 可能有以下的返回

sha1
Link copied to clipboard
open val sha1: ByteArray

文件内容 SHA1. 16 bytes

size
Link copied to clipboard
abstract val size: Long

文件大小 bytes

Inheritors

AbstractExternalResource
Link copied to clipboard

Extensions

sendAsFileTo
Link copied to clipboard
suspend fun <C : FileSupported> ExternalResource.sendAsFileTo(contact: C, path: String, callback: RemoteFile.ProgressionCallback? = null): MessageReceipt<C>

上传文件并发送件消息. 如果要上传的文件格式是图片或者语音, 也会将它们作为文件上传而不会调整消息类型.

sendAsImageTo
Link copied to clipboard
suspend fun <C : Contact> ExternalResource.sendAsImageTo(contact: C): MessageReceipt<C>

将图片作为单独的消息发送给指定联系人.

uploadAsFile
Link copied to clipboard
suspend fun ExternalResource.uploadAsFile(contact: FileSupported, path: String, callback: RemoteFile.ProgressionCallback? = null): FileMessage

上传文件并获取文件消息.

uploadAsImage
Link copied to clipboard
suspend fun ExternalResource.uploadAsImage(contact: Contact): Image

上传图片并构造 Image. 这个函数可能需消耗一段时间.

uploadAsVoice
Link copied to clipboard
suspend fun ExternalResource.uploadAsVoice(contact: Contact): Voice