简体   繁体   English

为什么不能使用httpurlconnection发布整个base64字符串?

[英]Why cannot post whole string of base64 using httpurlconnection?

I want to upload the image to the server. 我想将图像上传到服务器。

  1. I got the bitmap of the image and encoded it to base64. 我得到了图像的位图,并将其编码为base64。
  2. I convert the base64 of the image to a string using the encodeToString method. 我使用encodeToString方法将图像的base64转换为字符串。
  3. I post the string to PHP using httpurlconnection. 我使用httpurlconnection将字符串发布到PHP。 Actually, I got the string from PHP which is not the whole string. 实际上,我是从PHP获得的字符串,而不是整个字符串。 I don`t get any error. 我没有任何错误。 Please give me feedback! 请给我反馈!
public String httpURLConnectionPost(final String urlString){    
        String result="";    
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.connect();

            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.download);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] imageBytes = baos.toByteArray();
            String encodedImage = Base64.encodeToString(imageBytes, Base64.NO_CLOSE);

            String body= "image="+encodedImage;

            Log.d("serverPostData","body = " +body);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
            writer.write(body);
            writer.close();

            int responseCode = connection.getResponseCode();
            if(responseCode == HttpURLConnection.HTTP_OK){
                InputStream inputStream = connection.getInputStream();

                StringBuilder stringBuilder = new StringBuilder();
                String line;

                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                while ((line = br.readLine()) != null) {
                    stringBuilder .append(line);
                }
                result = stringBuilder .toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

The php got the string and decode it. PHP获取了字符串并对其进行了解码。

<?php

include("mysqli_connect.php");

$image= $_POST['image'];

$a = uniqid() ; 

$ImagePath = "good/$a.JPEG";

$ServerURL = "https://172.30.10.1/$ImagePath";

 $InsertSQL = "INSERT INTO Photoshop(photo) VALUES('$ServerURL')" ;

 if(mysqli_query($connect, $InsertSQL)){
          file_put_contents($ImagePath,base64_decode($image));
          echo $image;          
 }else{
    echo "failed";
}

mysqli_close();
?>

Try this to convert image to base64: 尝试将图像转换为base64:

Uri uri = data.getData();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
String encodedImageData = getEncoded64ImageStringFromBitmap(bitmap);

Now pass the data in API: 现在在API中传递数据:

 JsonObject data1 = new JsonObject();
 data1.addProperty("imageData", "data:image/png;base64," + encodedImageData);

Now set ImageBitmap: 现在设置ImageBitmap:

image.setImageBitmap(bitmap);

Here is the method: 这是方法:

private String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
    byte[] byteFormat = stream.toByteArray();
    // get the base 64 string
    String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP);

    return imgString;
}

And for HttpUrlConnection try this... 对于HttpUrlConnection,请尝试...

jsonObject = new JSONObject();
jsonObject.put("imageString", encodedImage);
String data = jsonObject.toString();
String yourURL = "yourphpfileurl";
URL url = new URL(yourURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setFixedLengthStreamingMode(data.getBytes().length);
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");

OutputStream out = new BufferedOutputStream(connection.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
out.close();
connection.connect();

InputStream in = new BufferedInputStream(connection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(
                in, "UTF-8"));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        in.close();
        String result = sb.toString();
        connection.disconnect();

Hope this one will work for you... 希望这个可以为您服务...

I solved my probelm that the base64 need to replace empty to "+". 我解决了我的问题,即base64需要将空替换为“ +”。

<?php

include("mysqli_connect.php");

$image= $_POST['image'];
$change =  str_replace(" ","+",$image);

$a = uniqid() ; 

$ImagePath = "good/$a.JPEG";

$ServerURL = "https://172.30.10.1/$ImagePath";

 $InsertSQL = "INSERT INTO Photoshop(photo) VALUES('$ServerURL')" ;

 if(mysqli_query($connect, $InsertSQL)){
          file_put_contents($ImagePath,base64_decode($change ));
          echo $image;          
 }else{
    echo "failed";
}

mysqli_close();
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM