Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.5k views
in Technique[技术] by (71.8m points)

kotlin - Android image compression - Zelory Compressor doesn't upload image with special character on file path

I'm using Zelory Compressor to compress an image before uploading it to the server. It works, unless the image file path has special characters in the beginning or in the middle of it (e.g. ?, ~, ^, etc.) I'd like to fix that since it's a Brazilian Portuguese (pt_BR) app, instead of just asking the users to upload images with a valid path.

My dependency:

implementation 'id.zelory:compressor:2.1.0'

My compressor method:

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)
        )
    }

StackTrace:

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)
question from:https://stackoverflow.com/questions/65855905/android-image-compression-zelory-compressor-doesnt-upload-image-with-special

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...