В моем приложении я загружаю изображение с моего устройства на локальный веб-сервер … после выполнения кода файл .jpg создается на сервере, но он не открывается. Размер файла на сервере отличается от исходного файла.
Активность Android: –
public class MainActivity extends Activity { private static int RESULT_LOAD_IMAGE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnSelectImage=(Button) findViewById(R.id.uploadButton); btnSelectImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_LOAD_IMAGE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data!=null) { Uri selectedImage=data.getData(); String[] filePathColumn={MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Bitmap bitmap=BitmapFactory.decodeFile(picturePath); ImageView im = (ImageView) findViewById(R.id.imgBox); im.setImageBitmap(bitmap); /* * Convert the image to a string * */ ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want. byte [] byte_arr = stream.toByteArray(); String image_str = Base64.encodeToString(byte_arr,Base64.DEFAULT); /* * Create a name value pair for the image string to be passed to the server * */ ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("image",image_str)); JSONObject jsonString=new JSONObject(); try { jsonString.put("img", image_str); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } new uploadImageToPhp().execute(jsonString); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class uploadImageToPhp extends AsyncTask<JSONObject, Void, Void> { String dataToSend=null; public static final String prefix="http://"; //prefix of the urls public static final String server_ip="172.16.26.155"; //the ip address where the php server is located public static final String completeServerAddress=prefix+server_ip+"/test_upload/upload_image.php"; //Exact location of the php files @Override protected Void doInBackground(JSONObject... params) { dataToSend="image="+params[0]; communicator(completeServerAddress, dataToSend); return null; } public void communicator(String urlString,String dataToSend2) { String result=null; try { URL url=new URL(urlString); URLConnection conn=url.openConnection(); HttpURLConnection httpConn=(HttpURLConnection) conn; httpConn.setRequestProperty("Accept", "application/json"); httpConn.setRequestProperty("accept-charset", "UTF-8"); httpConn.setRequestMethod("POST"); httpConn.connect(); //Create an output stream to send data to the server OutputStreamWriter out=new OutputStreamWriter(httpConn.getOutputStream()); out.write(dataToSend2); out.flush(); int httpStatus = httpConn.getResponseCode(); System.out.println("Http status :"+httpStatus); if(httpStatus==HttpURLConnection.HTTP_OK) { Log.d("HTTP STatus", "http connection successful"); BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8")); StringBuilder sb = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); sb.append(inputLine+"\n"); } in.close(); result=sb.toString(); try { //jsonResult = new JSONObject(result); } catch(Exception e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } } else { System.out.println("Somthing went wrong"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
PHP-код: –
$recievedJson=$_REQUEST['image']; $imageContent=json_decode($recievedJson,true); $base=$imageContent["img"]; $binary=base64_decode($base); echo $binary; header('Content-Type: bitmap; charset=utf-8'); $file = fopen('uploaded_image.jpg', 'wb'); fwrite($file, $binary); fclose($file);
Используйте ниже код. Он будет делать то же самое.
public class UploadImage extends Activity { InputStream inputStream; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want. byte [] byte_arr = stream.toByteArray(); String image_str = Base64.encodeBytes(byte_arr); ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("image",image_str)); Thread t = new Thread(new Runnable() { @Override public void run() { try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("server-link/folder-name/upload_image.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); String the_string_response = convertResponseToString(response); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(UploadImage.this, "Response " + the_string_response, Toast.LENGTH_LONG).show(); } }); }catch(Exception e){ runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(UploadImage.this, "ERROR " + e.getMessage(), Toast.LENGTH_LONG).show(); } }); System.out.println("Error in http connection "+e.toString()); } } }); t.start(); } public String convertResponseToString(HttpResponse response) throws IllegalStateException, IOException{ String res = ""; StringBuffer buffer = new StringBuffer(); inputStream = response.getEntity().getContent(); int contentLength = (int) response.getEntity().getContentLength(); //getting content length….. runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(UploadImage.this, "contentLength : " + contentLength, Toast.LENGTH_LONG).show(); } }); if (contentLength < 0){ } else{ byte[] data = new byte[512]; int len = 0; try { while (-1 != (len = inputStream.read(data)) ) { buffer.append(new String(data, 0, len)); //converting to string and appending to stringbuffer….. } } catch (IOException e) { e.printStackTrace(); } try { inputStream.close(); // closing the stream….. } catch (IOException e) { e.printStackTrace(); } res = buffer.toString(); // converting stringbuffer to string….. runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(UploadImage.this, "Result : " + res, Toast.LENGTH_LONG).show(); } }); //System.out.println("Response => " + EntityUtils.toString(response.getEntity())); } return res; } }
PHP-код
<?php $base=$_REQUEST['image']; $binary=base64_decode($base); header('Content-Type: bitmap; charset=utf-8'); $file = fopen('uploaded_image.jpg', 'wb'); fwrite($file, $binary); fclose($file); echo 'Image upload complete!!, Please check your php file directory……'; ?>
public JSONObject getJSONFromUrlPost(String url, String userid, String filepath, String status) { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); HttpParams httpParams = httpclient.getParams(); httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 100000); try { entity.addPart("id", new StringBody(userid, Charset.forName("UTF-8"))); entity.addPart("sharestatus", new StringBody(status, Charset.forName("UTF-8"))); entity.addPart("file", new FileBody(new File(filepath))); httppost.setEntity(entity); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = httpclient.execute(httppost, responseHandler); return new JSONObject(response.toString()); } catch (Exception e) { return null; } } ------------------------------------------------------------------ in main.java JSONParser js = new JSONParser(); String url="";// upload file with Server url JSONObject data = js.getJSONFromUrlPost(url); String response; try { response = data.getString("Msg"); if (response.contains("Succesfully upload file")) { JSONObject jsondata = new JSONObject(data.getString("Data")); Fileurl = jsondata.getString("Url"); } } catch (Exception e) { e.printStackTrace(); }