改善上传头像时间

Improve Uploading Avatar Time

我正在使用 Smack 上传头像。这需要很长时间,而且大部分时间都会超时(有时甚至 2 分钟都不够)。有什么办法可以改进吗?有没有其他方法可以快速上传头像?

我知道我可以只拥有自己的 http 服务来为头像提供服务,但我现在不愿意走那条路。获取VCard头像非常快

我使用 Smack 4.3.0,Smack 日志可在此处找到:https://pastebin.com/dQbSEpmJ

这是我使用的代码:

fun setPhoto(path: String) = viewModelScope.launch(Dispatchers.IO) {
        try {
            val file = File(path)
            val vCardMgr = VCardManager.getInstanceFor(connection)
            val vCard = vCardMgr.loadVCard()
            vCard.setAvatar(Base64.encodeToString(file.readBytes(), Base64.DEFAULT), FileUtils.getMimeType(path))
            vCardMgr.saveVCard(vCard)
        } catch (e: Exception) {
            launch(Dispatchers.Main){
                Toast.makeText(chatApp.applicationContext, e.message, Toast.LENGTH_LONG).show()
            }
        }
    }

我发现使用 openfire 进行测试时,文件大小如此之大 bing 进而导致 Stanza 过大以至于服务器崩溃。 Guus (Ignite Realtime guy) 证实了这一点,我在这里引用他的话:

Openfire has a (configurable) maximum stanza size limit. I think it’s on 2MB. Note that when you base64 encode binary data, the encoded result will be a lot larger than the unencoded original. I suggest that you reduce the image size in your vcard, or use another mechanism to exchange the data.

所以压缩图片解决了问题