首页 > 解决方案 > 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)

标签: androidkotlinokhttpmultipartimage-compression

解决方案


推荐阅读