Samarium150 / mirai-console-lolicon

基于LoliconAPI的mirai-console插件
GNU Affero General Public License v3.0
204 stars 17 forks source link

增加了更多存储 #79

Open incubator4 opened 2 years ago

incubator4 commented 2 years ago

从原来的File存储增加了S3/OSS的支持

给存储的层面做了一个抽象

abstract class AbstractImageStorage {
    abstract suspend fun load(url: String) : ByteArray
    abstract suspend fun save(url: String, bytes: ByteArray)
    suspend fun getImageWithCache(url: String) : InputStream {
        val bytes = if (PluginConfig.cache) {
            try {
                load(url)
            } catch (e: Exception) {
                // 如果没有缓存,则下载图片
                downloadImage(url)
            }
        } else {
            downloadImage(url)
        }

        if (PluginConfig.save) {
            save(url, bytes)
        }
        return bytes.inputStream()
    }
}

增加了一个StorageConfig的内容,用于判断存储类型和保存OSS/S3的AK/SK

object StorageConfig : AutoSavePluginConfig("StorageConfig") {
    /**
     * 存储类型
     */
    @ValueDescription("可选:FILE/S3/OSS")
    val type: String by value("FILE")

    val accessKey: String by value("")
    val secretKey: String by value("")
    val bucket: String by value("")
    val endpoint: String by value("")
    val region: String by value("")
}

其中 accesskeysecretkey是用于访问对象存储的工具,对于minio和阿里云ossendpointbucket是必要的,endpoint是一个url地址用于访问,bucket是具体的桶

对于AWS S3 来说,可以使用region代替 endpoint

Samarium150 commented 2 years ago

感谢pr,我其实有想在V6支持mirai-android的(虽然它好久没更了),新引入的依赖支持android端吗

incubator4 commented 2 years ago

感谢pr,我其实有想在V6支持mirai-android的(虽然它好久没更了),新引入的依赖支持android端吗

原则上来讲是支持的,引用了AWS S3的SDK和Aliyun OSS的SDK,阿里云的是作为Android 依赖的版本存在的,至于aws的s3,由于它是一套通用的对象存储协议,所以基于对云厂商的信任,认为它应该是支持Android的,不过没有做进一步的测试,不能得出一定的结论

Samarium150 commented 2 years ago

ci为什么会裂开 Details