android - Android 图像压缩 - Zelory Compressor 不会在文件路径上上传带有特殊字符的图像
问题描述
我正在使用 Zelory Compressor 在将图像上传到服务器之前对其进行压缩。它可以工作,除非图像文件路径的开头或中间有特殊字符(例如ç,〜,^等)我想解决这个问题,因为它是巴西葡萄牙语(pt_BR)应用程序,而不是只是要求用户上传具有有效路径的图像。
我的依赖:
implementation 'id.zelory:compressor:2.1.0'
我的压缩方法:
fun compress(context: Context, path: String) : MultipartBody.Part {
var file = File(path)
try {
file = Compressor(context)
.setMaxWidth(1080)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.compressToFile(file)
} catch (ex: Exception) {
Log.d("Error : ", "Erro upload: ${ex.message}")
}
return MultipartBody.Part.createFormData(
"document",
file.name,
RequestBody.create(MediaType.parse("image/*"), file)
)
}
堆栈跟踪:
Caused by: java.lang.IllegalArgumentException: Unexpected char 0xe7 at 91 in Content-Disposition value: form-data; name="document"; filename="Teste acentuação de línguas latinas.png"
at okhttp3.Headers.checkValue(Headers.java:272)
at okhttp3.Headers.of(Headers.java:224)
at okhttp3.MultipartBody$Part.createFormData(MultipartBody.java:259)
at br.com.company.util.CameraUtils$Companion.compress(CameraUtils.kt:196)
at br.com.company.viewmodel.RefundAttachFilesViewModel.uploadDocument(RefundAttachFilesViewModel.kt:29)
at br.com.company.ui.refund.RefundAttachFilesActivity.onActivityResult(RefundAttachFilesActivity.kt:132)
at android.app.Activity.dispatchActivityResult(Activity.java:7454)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4384)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4433)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6702)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
解决方案
推荐阅读
- sql - POSTGRES - 在 ON CONFLICT 子句中以不同方式处理多个唯一索引
- macos - 为什么我得到一个存在的目录“没有这样的文件或目录”?
- android - Update in firestore not working as intended
- ios - 当玩家点击屏幕开始游戏时如何开始基于时间的得分
- javascript - 获取所有必需的输入并在页面加载时检查它们
- arrays - Hive 中是否有任何内置函数可以计算配置单元表中两个列表的交集?
- html - 将“宽屏”图像放入方形 div
- python - 如何从字典数组创建值列表?
- mysql - MySQL根据属性值返回JSON数组索引
- node.js - PWA 通知在 PC 上工作正常,但不会将其发送到移动设备