200kb映像到base64无法发送到Web服务

时间:2016-11-07 06:55:23

标签: android json web-services base64

当我在网络服务中发送base64图像时,我得到了错误的请求400, 我将base64字符串添加到JSON并使用改进将其POST。这是我的代码

Bitmap bm = BitmapFactory.decodeFile("IMAGE PATH");
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream .toByteArray();
            String imgbase64 = Base64.encodeToString(byteArray, Base64.NO_WRAP + Base64.URL_SAFE);

并添加到JSONObject

  JSONObject jo = new JSONObject();
            try {
                jo.put("id",users.get(counter).getId());
                jo.put("firstname",users.get(counter).getFirstname());
                jo.put("middlename",users.get(counter).getMiddlename());
                jo.put("lastname",users.get(counter).getLastname());
                jo.put("suffix",users.get(counter).getSuffix());
                jo.put("image",imgbase64);
          jo.put("date_registered",users.get(counter).getDate_registered());


            } catch (JSONException e) {
                e.printStackTrace();
            }

我将使用改装发送它

 ServiceInterface si = RestClient.getClient();
 Observable<Response> call = si.postUser(jo.toString());

图像大小为200kb,我收到错误请求错误 但是当我的图像尺寸只有10kb时它工作正常。 请帮忙。

1 个答案:

答案 0 :(得分:0)

尝试使用以下解决方案解码图像并发送

   Bitmap bitmap;
   String encodedString ="";
   String filepath=""; // your uploaded image file path

   try {
            BitmapFactory.Options options = null;
            options = new BitmapFactory.Options();
            options.inSampleSize = 1;
            bitmap = BitmapFactory.decodeFile(filepath, options);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            // Must compress the Image to reduce image size to make upload easy
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

            byte[] byte_arr = stream.toByteArray();
            // Encode Image to String
            encodedString = Base64.encodeToString(byte_arr, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }

您可以将 encodedString 添加到您的JSON。

这是用于解码和上传图像到服务器的PHP Web服务,也可以对数据库执行操作。

 <?php

   include('../db/config.php');  

    // Get image string posted from Android App
    $base=$_REQUEST['image'];
    // Get file name posted from Android App
    $filename = $_REQUEST['filename'];// this your image filename like testimage.jpg

    //other files
    $id= $_REQUEST['id'];
    $firstname = $_REQUEST['firstname'];
    $middlename = $_REQUEST['middlename'];// add your parameter

    // Decode Image
    $binary=base64_decode($base);
    header('Content-Type: bitmap; charset=utf-8');
    // Images will be saved under 'www/imgupload/uplodedimages' folder
    $file = fopen('uploads/'.$filename, 'wb');
    // Create File
    fwrite($file, $binary);
    fclose($file);
    // echo 'Image upload complete, Please check your php file directory';
    if(isset($filename) && $filename !=''){
        $fileUrl = "http://yourdomain/android/upload/".$filename;
      }else{
        $fileUrl = '';
      }
    $sql=mysql_query("INSERT INTO tbl_name(Id,firstName,middleName,FileUrl) VALUES ('$Id','$firstName','$middleName','$fileUrl')");

  ?>

我建议尝试使用此解决方案,它会起作用。