Java 将位图写入MIME消息

Java 将位图写入MIME消息,java,android,bitmap,base64,mime,Java,Android,Bitmap,Base64,Mime,编辑2:根据我第一次编辑的结果,在文章的底部,问题出现在这一行或下面:imageEncodedSigneAgent=Base64.encodeToString(byteSigneAgent,Base64.NO_WRAP)” /编辑 我尝试在MIME消息中编写位图,作为PNG格式的Base64字符串。遗憾的是,该消息被视为null(windows viewer无法读取,称大小为0kb) 我的代码: Bitmap bitmapSigne = BitmapFactory.decodeF

编辑2:根据我第一次编辑的结果,在文章的底部,问题出现在这一行或下面:
imageEncodedSigneAgent=Base64.encodeToString(byteSigneAgent,Base64.NO_WRAP)”
/编辑

我尝试在MIME消息中编写位图,作为PNG格式的Base64字符串。遗憾的是,该消息被视为null(windows viewer无法读取,称大小为0kb)

我的代码:

        Bitmap bitmapSigne = BitmapFactory.decodeFile(fileSigne.getAbsolutePath());
        if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - bitmapSigne width = " + bitmapSigne.getWidth());};
        ByteArrayOutputStream baos = new ByteArrayOutputStream(bitmapSigne.getByteCount());  
        if (!bitmapSigne.compress(Bitmap.CompressFormat.PNG, 100, baos)) {
            new TException(tagLocal, "Compress bitmapSign == ", "false");
        }
        byte[] byteSigne = baos.toByteArray(); 
        if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - byteSigne size = " + byteSigne.length);};
        String imageEncodedSigne = Base64.encodeToString(byteSigne,Base64.NO_WRAP);
        if (Params.tagFgDebug && fgDebugLocal){Log.i(Params.tagGen, tagLocal + "createEMLInt - imageEncodedSigne size = " + imageEncodedSigne.length());};
        mime.append(imageEncodedSigne);
        mime.append("\r\n");
这确实在我的MIMI消息中写入了64行基线,但它不能被读取,可能有点短。我想它可能是PNG周围的元数据(从我解码后读到的)

我测试过将位图直接保存到文件中,效果非常好:

        // test to retrieve BitMap as PNG
        String signePath2 = Baseline.strSdExternalPath + File.separator + Params.MIF_REP;
        File file = new File(signePath2, "sign.png");
        FileOutputStream fOut = new FileOutputStream(file);
        bitmapSigne.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
        // test to retrieve BitMap as PNG
我正确地得到了我以前画的图像

我还尝试(来自另一个SO问题的想法:)将字符串重新转换为位图,但失败了:(

我在这里遗漏了什么?为什么我无法正确检索字节数据并在base64中获取可读字符串

任何帮助,谢谢

我以前使用Base64.DEFAULT没有更好的结果。我读了几篇文章,其中一篇链接的内容与我想做的最接近,遗憾的是,他的问题在于“equalTo”的用法不当

编辑:所以我试着做位图->字节[]->位图,结果成功了:

Bitmap bitmapReconverted = BitmapFactory.decodeByteArray(byteSigne, 0, byteSigne.length);
        File fileReconverted = new File(signePath2, "signReConverted.png");
        fOut = new FileOutputStream(fileReconverted);
        bitmapReconverted.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
编辑3:用于文档目的的MIME结果

Content-Type: image/png
内容配置:表单数据;name=“body”;filename=“20150601.190623\u 00008\u SIGN.PNG” 内容传输编码:base64
iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAA

除此部分外,所有内容均正确:

Content-Disposition: form-data; name="body";filename="20150601.190623_00008_SIGN.PNG" 
Content-Transfer-Encoding: base64 
iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAAA3NCSVQICAjb4U/gAAAZsEl
应该这样写:

Content-Disposition: form-data; name="body";filename="20150601.190623_00008_SIGN.PNG" 
Content-Transfer-Encoding: base64 

iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAAA3NCSVQICAjb4U/gAAAZsEl

注意到另外一行了吗?是的,这就是所有的人。

旁注:
新TException(…)
显然没有任何作用。你的意思可能是
抛出新TException(…)
是的,是的。你不知道,但它是一个自定义异常包装器,没有调用“throw”方法可能是一个糟糕的设计。它可能不是一个很好的设计。从发布的代码中不清楚,但可能是对象的创建没有用。此外,创建异常的子类有助于捕获它。并且
throw
关键字会立即解释发生了什么。你能发布日志吗?嗨,如果你认为这对你有帮助,我可以发布MIME消息。不会引发异常。检查我的编辑,问题不在那里,它在代码下面的某个地方。
Content-Disposition: form-data; name="body";filename="20150601.190623_00008_SIGN.PNG" 
Content-Transfer-Encoding: base64 

iVBORw0KGgoAAAANSUhEUgAAAOYAAABuCAIAAAC86/hZAAAAA3NCSVQICAjb4U/gAAAZsEl