我正在通过Android应用程序将byte []作为编码字符串发送。我转换我的byte []的方式如下(基本上byte []是thumbscan / fingerscan图像):Android

byte[] imageData = m_left_enrollment_fmd(); // returns byte[] which is OK!
// Base64 belongs to android.util package
String forJson = Base64.encodeToString(imageData , Base64.DEFAULT);


这就是我在服务器端(Java)上对其进行解码的方式:

// Base64 belongs to java.util package
byte[] imageData = Base64.getDecoder().decode(sqlJsonParams.optString("IMAGE_DATA"));


它生成以下异常:


]] ServletException的根本原因。
java.lang.IllegalArgumentException:非法的base64字符-1
在java.util.Base64 $ Decoder.decode0(Base64.java:714)
在java.util.Base64 $ Decoder.decode(Base64.java:526)
在java.util.Base64 $ Decoder.decode(Base64.java:549)
在org.skm.webresources.mobilehis.v2.Fingerprint.getByteArray(Fingerprint.java:470)
在org.skm.webresources.mobilehis.v2.Fingerprint.postFingerprint(Fingerprint.java:86)
截断了。请参阅日志文件以获取完整的stacktrace



问题1:我做错了什么?
问题2:这是在REST Service中发送byte []的正确方法吗?


到目前为止,我看到的问答如下:


Base 64 encode and decode example code
Base64: java.lang.IllegalArgumentException: Illegal character
Java - decode base64 - Illegal base64 character 1

最佳答案

我已将图像分成多部分发送,这可能会有所帮助:

ArrayList<MultipartBody.Part> list = new ArrayList<>();
        File photo = new File(image_uri);
        RequestBody file = RequestBody.create(MediaType.parse(getMimeType(photo.getAbsolutePath())), photo);
        MultipartBody.Part partImage = MultipartBody.Part.createFormData("image", photo.getName(), file);
        list.add(partImage);
        Call<Void> call = api.uploadMyImage(agreement, list, "@");


getMimeType():

public static String getMimeType(String url) {
        String type = null;
        String extension = MimeTypeMap.getFileExtensionFromUrl(url);
        if (extension != null){
            type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        }

        return type;
    }


到Base64:

public static String convertToBase64(String path) {
        Bitmap bm = BitmapFactory.decodeFile(path);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] byteArrayImage = baos.toByteArray();
        String encodedImage = android.util.Base64.encodeToString(byteArrayImage, android.util.Base64.DEFAULT);
        return encodedImage;
    }

10-07 19:20
查看更多