Как отправить фото на сервер в Android - PullRequest
0 голосов
/ 14 сентября 2018

У меня просто была путаница в том, как пользователь может выбрать фотографию из файловой памяти и установить ее в качестве фотографии профиля, а в фоновом режиме фотография должна быть отправлена ​​на сервер. До сих пор я не мог дать Пользователь выбирает опцию и затем устанавливает эту фотографию в профильном изображении, но я все еще не знаю, что мне отправить на сервер, я не знаю, какой API мне нужен и какой формат подходит для этого. мой текущий код:

        playerImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent galleryintent = new Intent(Intent.ACTION_PICK, 
                              MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                   galleryintent.setType("image/*");
                   galleryintent.putExtra("aspectX", 1);
                   galleryintent.putExtra("aspectY", 1);
                   galleryintent.putExtra("scale", true);
                   galleryintent.putExtra("outputFormat",
                           Bitmap.CompressFormat.JPEG.toString());

            startActivityForResult(galleryintent, i);
        }
    });

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == i && resultCode == RESULT_OK && data != null) {
        Uri selectedImage = data.getData();
        assert selectedImage != null;
        Log.i("selected Image",selectedImage.toString());
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),selectedImage);
            String image = getStringImage(bitmap);
            Log.d("image",image);
            //passing the image to volley
            SendImage(image);
        } catch (IOException e) {
            e.printStackTrace();
        }
        saveImage(bitmap);
        playerImage.setImageURI(selectedImage);
       // playerImage.setImageBitmap();
        pathToImage = selectedImage.getPath();
        //stuff to do on click button upload cover??
    }
}

public String getStringImage(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    return Base64.encodeToString(imageBytes, Base64.DEFAULT);

}

 public static void saveImage(Bitmap bitmap) {
    OutputStream output;
    String recentImageInCache;
    File filepath = Environment.getExternalStorageDirectory();

    // Create a new folder in SD Card
    File dir = new File(filepath.getAbsolutePath()
            + "/YOUR_APP/profile");
    dir.mkdirs();

    // Create a name for the saved image
    File file = new File(dir, username+".jpg");
    try {

        output = new FileOutputStream(file);

        // Compress into png format image from 0% - 100%
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
        output.flush();
        output.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Это где у меня нет никакой подсказки

 private void SendImage( final String image) {
  final ProgressDialog loading = ProgressDialog.show(Matchboard.this, "updating in...", null, true, true);

    RequestQueue requestQueue= Volley.newRequestQueue(this);
    String url="http://www.judgement6.com/judgement_files/profileImage.php";
    final StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d("uploade",response);
                    try {
                        loading.dismiss();
                        JSONObject jsonObject = new JSONObject(response);
                        Log.e("returns", String.valueOf(jsonObject));
                        if (jsonObject.toString().equals("image uploaded successfully")){
                           Toast.makeText(Matchboard.this,"image uploaded successfully",Toast.LENGTH_LONG).show();
                        }

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

            }
,
        new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(Matchboard.this, "No internet connection", Toast.LENGTH_LONG).show();

    }
}) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {

        Map<String, String> params = new Hashtable<String, String>();

        params.put("image", image);
        params.put("email",userEmail);
        return params;
    }
};
{
    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    stringRequest.setRetryPolicy(policy);
    requestQueue.add(stringRequest);
}
}

Я также хочу загружать эту фотографию с сервера каждый раз, когда пользователь входит в систему, поэтому ему не нужно устанавливать ее каждый раз. Это мой profileIph.php

<?php

if($_SERVER['REQUEST_METHOD']=='POST'){
require_once('connect.php');
$image=$_POST['image'];
$email=$_POST['email'];

$sql = "update users2 set profileImage='$image' where email='$email'";

if(mysqli_query($con,$sql)){
echo 'image uploaded successfully';
  } 
  else
    {
      echo 'oops! Please try again!';
    }   
   } 
  ?>

Все, что я хочу, это вернуть изображение в виде URL-адреса, например xyz.com/image/1.png, типа вещи

...