2017-11-29 1 views
0
ByteArrayOutputStream bytearray = new ByteArrayOutputStream(); 
mBitmapProfile.compress(Bitmap.CompressFormat.JPEG, 100, bytearray); 
String base64 = Base64.encodeToString(bytearray.toByteArray(), Base64.DEFAULT); 
String data = URLEncoder.encode("SOURCE", "UTF-8") + "=" base64; 

String result = getHttpData("http://example/p.php", data); 


private String getHttpData(String httpUrl, String param) { 
     String urlString = httpUrl; 
     String data = param; 

     try { 
      URL url = new URL(urlString); 

      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

      // urlConnection.setConnectTimeout(CONNECTION_TIMEOUT); 
      // urlConnection.setReadTimeout(DATARETRIEVAL_TIMEOUT); 

      urlConnection.setRequestMethod("POST"); 
      urlConnection.setDoOutput(true); 
      OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream()); 

      wr.write(data); 
      wr.flush(); 

      int responseCode = urlConnection.getResponseCode(); 

      if (responseCode == HttpsURLConnection.HTTP_OK) { 

       BufferedReader br=new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
       String response = ""; 
       String line = ""; 
       while ((line = br.readLine()) != null) { 
        response+=line; 
       } 
       return response; 
      } 
     } catch(MalformedURLException e){ 
      e.printStackTrace(); 
      return null; 
     } catch(IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 
     return ""; 
    } 

를 PHP로 안드로이드에서 게시물을 보낼 수 있습니다.은 64 기수로 이미지를 압축하고 base64로이 문제를 일으킬 수 PHP 안드로이드에서 요청을, POST를 사용하여 이미지를</p> <p>을 인코딩 한 후

예)

안드로이드 송신 데이터 :

일부 특수 문자는/9J/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBABAQEBAQE :/9J/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBA + BAQEBAQE의 ==

PHP는 데이터 수신 잃어버린.

왜 그렇습니까?

답변

0

문제는 base64로 인코딩 된 데이터는 '+'문자를 포함 할 수 있다는 것입니다. x-www-form-urlencoded 데이터에서 수신기는 '+'가 공백 문자의 인코딩임을 알고 있습니다. 따라서 base64 값을 인코딩하는 URL이 아니기 때문에 '+'의 인스턴스는 수신시 데이터가 손상 될 수 있습니다.

관련 문제