【问题标题】:Base64 encoded image gets cut-off when uploading from android to server从 android 上传到服务器时 Base64 编码的图像被截断
【发布时间】:2016-03-22 06:56:17
【问题描述】:

我在使用 put-volley-request 向运行 php/slim 的服务器发送 base64 编码图像时遇到一些问题。

当我在发送之前输出数据时看起来不错,但是一旦我在服务器上获取它,数据就会损坏/剪切。

我用于发送图像的 Android 代码如下所示:

private void updateImage(Bitmap myImage) {
    String tag_string_req = "req_updateimage";

    String updateUrl = String.format(API_DOMAIN + AppConfig.URL_UPDATE_IMAGE);
    StringRequest strReq = new StringRequest(Request.Method.PUT, updateUrl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            try {
                //do some stuff
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Error: " + error.getMessage());
        }

    }){

        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json; charset=UTF-8");

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            myImage.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream.toByteArray();
            String base64Image = Base64.encodeToString(byteArray, Base64.DEFAULT);
            params.put("image", base64Image);

            System.out.println(params);
            return params;
        }
    };

    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}

在我的服务器上,我有一个类似的功能:

$app->put('/image', function() use ($app){
    $image = $app->request->put('image');
    $response['error'] = false;
    $response['image'] = $image;
    echoResponse(200, $response);
});

我的 android-function 中的输出看起来像一个正确的 base64 编码图像。 在我的服务器上,只有大约 30% 的整个图像。你能帮助我吗?我的虫子在哪里?怎么了?

提前致谢,

RiPr

【问题讨论】:

  • 从 php.ini 增加帖子最大数据大小
  • 图像大小在 40kb 到最大 100kb 之间。默认的帖子最大数据大小约为 20M,对吧?我认为这不会解决我的问题。
  • 您的图像已更改为字符串,我的意思是在 base64 中,因此可能会导致问题。所以尝试使用multipart将图像上传到服务器。快速有效的方法
  • 解决问题并使用 CURL 或 Postman 将数据放到服务器上,看看是否可行。如果是这样,那么Android代码有问题。
  • 两端的内容编码是否相同?

标签: php android android-volley slim


【解决方案1】:

您似乎没有设置正确的内容类型。

在您的 Java 代码中...

params.put("Content-Type", "application/json; charset=UTF-8");

这会告诉您的超薄应用您尝试发送的数据是应用程序/json 格式......但事实并非如此。

尝试更改编码以匹配您发送的数据结构。

【讨论】:

  • 好吧 - 如果我将 base64 编码的图像放在这个 json 中作为 attr 的值,为什么它不是 json 格式? JSON 看起来(在这种情况下)类似于 { "image": "HERECOMESMYBASE64ENCODEDIMAGEANDSOON" }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多