当前位置: 首页 > 知识库问答 >
问题:

Java中的Base64字符串损坏

司寇山
2023-03-14

我修改了一个phonegap插件。Java部分输出一个base64字符串:

package org.apache.cordova;

import java.io.ByteArrayOutputStream;
import java.io.File;

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;

import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Base64;
import android.view.View;



public class Screenshot extends Plugin {

    @Override

    public PluginResult execute(String action, JSONArray args, String callbackId) {
        // starting on ICS, some WebView methods
        // can only be called on UI threads
        final Plugin that = this;
        final String id = callbackId;
        super.cordova.getActivity().runOnUiThread(new Runnable() {
            //@Override
            @TargetApi(8)
            public void run() {
                View view = webView.getRootView();

                view.setDrawingCacheEnabled(true);
                Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
                view.setDrawingCacheEnabled(false);

                File folder = new File(Environment.getExternalStorageDirectory(), "Pictures");
                if (!folder.exists()) {
                    folder.mkdirs();

                }

                File f = new File(folder, "screenshot_" + System.currentTimeMillis() + ".png");
                System.out.println(folder);
                System.out.println("screenshot_" + System.currentTimeMillis() + ".png");



                ByteArrayOutputStream baos = new ByteArrayOutputStream();  
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
                byte[] b = baos.toByteArray();
                String base64String = Base64.encodeToString(b, Base64.DEFAULT);
                String mytextstring = "data:image/png;base64,"+base64String;
                System.out.println(mytextstring);

                that.success(new PluginResult(PluginResult.Status.OK, mytextstring), id);
            }
        });

        PluginResult imageData = new PluginResult(PluginResult.Status.NO_RESULT);
        imageData.setKeepCallback(true);
        System.out.println("imageData=============>>>>>"+imageData);
        return imageData;
    }

}

然后我将它传递给某个Javascript,然后将字符串发送给服务器。我已经检查了.php文件接收到的字符串,base64字符串是相同的。然而,当我解码base64字符串时,它似乎已损坏。为了更好的示例,将此文本文件的内容复制到解码器中。

注意:当.php文件尝试解码它的数据:image/png;base64在前面时,我只是将它移除,以便您将它粘贴到解码器中。

http://www.motobit.com/util/base64-decoder-encoder.asp

我所能想到的是,由于某种原因,我可能没有正确地从Java输出base64字符串。有人知道怎么回事吗?或者是什么原因造成的呢?

共有1个答案

於乐
2023-03-14

昨晚我花了几个小时考虑了这些建议。

首先,我在编码之前检查图像。很好。

然而,在将其转到Javascript之前对其进行解码表明它已经损坏,这意味着它必须与Java编码过程有关。为了解决这个问题,我并不声称100%理解为什么会发生这种情况,但问题似乎出在这段代码上:

String mytextstring = "data:image/png;base64,"+base64String;
String mytextstring = base64String;
function returnScreenshotImage(imageData) { 
    base64string = "data:image/png;base64,"+imageData;
    console.log("String: "+base64string);

    var url = 'http://www.websitename.co.uk/upload.php';
    var params = {image: imageData};

    document.basicfrm.oldscreenshotimg.value = document.basicfrm.screenshotimg.value;

    // send the data
    $.post(url, params, function(data) {
           document.basicfrm.screenshotimg.value = data;

           });    
}

正如您所看到的行:

base64string = "data:image/png;base64,"+imageData;
 类似资料:
  • base64编码字符串:yobic4fy base64解码字符串(来自ASP页面):`àhsx(正确) Base64解码字符串(来自JSP页面和Eclipse):^àhs?x(不正确) Java/JSP代码: 重申一下,正确的值应该是。我不明白问题出在哪里。如有任何帮助,我们将不胜感激。 在ASP内部,明文值是从密码中正确实现的: 明文:foobar 密文:??hsx 解码的base64字符串:?

  • 问题内容: 是否有仅使用JAVA 1.5 LIBRARIES来解码base64字符串的简便方法? 由于Windows和Mac OS X之间存在跨平台兼容性问题,我必须使用Java 1.5(仅Mac 10.5支持Java 1.6,低于10.5的所有内容均默认使用Java 1.5)。 对象“ sun.misc.Base64Decoder”在Java 6中存在,但在Java 5中不存在。 问题答案: 不

  • 本文向大家介绍java实现图片转base64字符串 java实现base64字符串转图片,包括了java实现图片转base64字符串 java实现base64字符串转图片的使用技巧和注意事项,需要的朋友参考一下 java 图片转base64字符串、base64字符串转图片,具体内容如下 1. 图片转base64字符串: 2. base64字符串转图片: 3. 测试: 效果图: 以上就是本文的全部内

  • 问题内容: 我有一个图像通过JSON字符串发送给我。我想将该字符串转换为我的Android应用程序中的图像,然后显示该图像。 JSON字符串如下所示: 注意:我用…截断了字符串。 我有一个函数(我认为)可以将字符串转换为图像。我这样做对吗? 然后我尝试像这样在我的android活动上显示它 但是,当我这样做时,什么也没有显示。我在logcat中没有任何错误。我究竟做错了什么? 谢谢 问题答案: 我

  • 问题内容: 我正在尝试将屏幕截图输出作为base64编码的字符串输出,但距离不是很远。到目前为止,我拥有的代码使用Base64库(http://iharder.sourceforge.net/current/java/base64/): 每次运行此命令时,“结果”始终为空字符串,但我不明白为什么。有任何想法吗? 注意:我不想将png写入磁盘上的文件。 问题答案: 我遵循xehpuk的回答,但是某些

  • 我想将一个字符串编码成并通过套接字传输它,然后解码回来。 下面是我的代码,结果是“77+9x6s=” 有什么想法如何实现这一点吗?