为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2022-07-27 09:46:29
我想将图像上传到服务器。我得到了图像的位图并将其编码为base64。我使用 encodeToString 方法将图像的 base64 转换为字符串。我使用 httpurlconnection 将字符串发布到 PHP。实际上,我从 PHP 获得的字符串不是整个字符串。我没有收到任何错误。请给我反馈!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;    }
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

我解决了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();

?>


查看完整回答
反对 回复 2022-07-27
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

试试这个将图像转换为base64:


Uri uri = data.getData();

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

String encodedImageData = getEncoded64ImageStringFromBitmap(bitmap);

现在在 API 中传递数据:


 JsonObject data1 = new JsonObject();

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

现在设置 ImageBitmap:


image.setImageBitmap(bitmap);

这是方法:


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;

}

对于 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();

希望这个对你有用...


查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信