改善上传头像时间
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.
所以压缩图片解决了问题
我正在使用 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.
所以压缩图片解决了问题