首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将Base64与JSONObject一起发送到服务器(ANDROID)

将Base64与JSONObject一起发送到服务器(ANDROID)
EN

Stack Overflow用户
提问于 2017-07-23 10:45:10
回答 3查看 3.1K关注 0票数 1

当我将图像编码到基本64并试图通过JSON发送图像时,我想我得到了一个奇怪的编码错误。

我对以位图开头的照片进行编码,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            photo.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream .toByteArray();
            encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

而i在json上发送“编码”字符串。

代码语言:javascript
代码运行次数:0
运行
复制
 JSONObject postDataParams = new JSONObject();

        postDataParams.put(ArchivoTexto, encoded);

现在,我看到的问题是,当我发送JSON时,控制台表示它发送的编码字符串如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wB

但是,如果我将“编码”字符串复制到剪贴板上,则如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
/9j/4AAQSkZJRgABAQAAAQABAAD/2wB 

反斜杠消失了,如果我使用一个网站来解码来自剪贴板的字符串,它就成功地解码了图像,但是当我通过JSON将字符串发送到服务器时,它看起来就坏了,所以我怀疑反斜杠使它破裂。

我的问题是,在将字符串发送到JSON上之前,我应该寻找一种删除反斜杠的方法,还是服务器不能正确解释字符串的错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-08 15:25:41

在PHP文件中这样做

  1. 从已发布的数据(base64)中生成Json字符串,并删除"\n“字符(以避免该字符)
  2. 解码该JSON字符串以删除该JSON字符
  3. 得到解码的字符串

这是我的工作

代码语言:javascript
代码运行次数:0
运行
复制
$img_base64 = $_POST['ArchivoTexto'];
$sdata = '{"val" : "'.sub_str("\n","",$img_base64).'"}';

$ddata = json_decode($sdata);

$jdata = $ddata->val;//$jdata contain the clear base64 String
票数 1
EN

Stack Overflow用户

发布于 2017-07-23 11:32:49

将位图转换为base64字符串

代码语言:javascript
代码运行次数:0
运行
复制
public static String getBase64Image(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}

然后用这种方式将\n替换为"“

代码语言:javascript
代码运行次数:0
运行
复制
String Base64Photo = getBase64Image(decodeFile(bitmap)).replace("\n", "");
票数 1
EN

Stack Overflow用户

发布于 2017-07-23 11:02:46

--您正在发送编码的字符串,就像将它放入JSONObject中一样--不要这样做,这可能是产生反斜杠的原因。

I建议使用Volley将图像发送到Server.

private void uploadImage() {

代码语言:javascript
代码运行次数:0
运行
复制
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //Do something with response
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    }
    ) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            HashMap<String, String> hashMap = new HashMap<>();
            hashMap.put("image",imageToString(mBitmap)); //passing bitmap for converting into String
            return hashMap;
        }
    };
    mRequestQueue.addToRequestQueue(stringRequest);  //mRequestQueue is from Volley
}

private String imageToString(Bitmap bitmap) {

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
    byte[] imgBytes = byteArrayOutputStream.toByteArray();
    return Base64.encodeToString(imgBytes, Base64.DEFAULT);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45264184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档