Как загрузить несколько файлов с помощью Fast Android Networking Library - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь загрузить несколько файлов на свой сервер с помощью сетевой библиотеки Fast Android. Я использую библиотеку Декстер, чтобы выбрать файл. Вот мой код:


public class RegisterActivity extends AppCompatActivity {
    private ImageButton ibPick;
    private CircleImageView civProfile;
    private Button btnConfirm, btnSubmit, btnNidFront, btnNidBack;
    private EditText editTextEmail, editTextPassword, editTextName, editTextMobile, editTextOccupation, editTextAddress, editTextNidBack;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        ibPick = findViewById(R.id.btn_pick);
        civProfile = findViewById(R.id.profile_image);
        btnConfirm = findViewById(R.id.btn_confirm);
        btnSubmit = findViewById(R.id.btn_submit);
        btnNidFront = findViewById(R.id.btnNidFront);
        btnNidBack = findViewById(R.id.btnNidBack);

        editTextName = findViewById(R.id.editTextName);
        editTextPassword = findViewById(R.id.editTextPass);
        editTextEmail = findViewById(R.id.editTextEmail);
        editTextMobile = findViewById(R.id.editTextMobile);
        editTextOccupation = findViewById(R.id.editTextOccupation);
        editTextAddress = findViewById(R.id.editTextAddress);
        editTextNidBack = findViewById(R.id.editTextNidBack);

        progressDialog = new ProgressDialog(RegisterActivity.this);
        progressDialog.setMessage("Uploading Image. Please Wait");
        progressDialog.setCancelable(false);
        progressDialog.setMax(100);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

        btnNidBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Dexter.withActivity(RegisterActivity.this)
                        .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                        .withListener(new PermissionListener() {
                            @Override
                            public void onPermissionGranted(PermissionGrantedResponse response) {
                                CropImage.activity()
                                        .setGuidelines(CropImageView.Guidelines.ON)
                                        .start(RegisterActivity.this);
                            }

                            @Override
                            public void onPermissionDenied(PermissionDeniedResponse response) {
                                if(response.isPermanentlyDenied()){
                                    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                    builder.setTitle("Permission Required")
                                            .setMessage("Permission to access your device storage is required to pick image. Please go to settings to enable storage permission to access storage")
                                            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    Intent intent = new Intent();
                                                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                                    intent.setData(Uri.fromParts("package", getPackageName(), null));
                                                    startActivityForResult(intent, 51);
                                                }
                                            })
                                            .setNegativeButton("Cancel", null)
                                            .show();
                                }
                            }

                            @Override
                            public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                                token.continuePermissionRequest();
                            }
                        })
                        .check();
            }
        });
        ibPick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Dexter.withActivity(RegisterActivity.this)
                        .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                        .withListener(new PermissionListener() {
                            @Override
                            public void onPermissionGranted(PermissionGrantedResponse response) {
                                CropImage.activity()
                                        .setGuidelines(CropImageView.Guidelines.ON)
                                        .start(RegisterActivity.this);
                            }

                            @Override
                            public void onPermissionDenied(PermissionDeniedResponse response) {
                                if(response.isPermanentlyDenied()){
                                    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                    builder.setTitle("Permission Required")
                                            .setMessage("Permission to access your device storage is required to pick image. Please go to settings to enable storage permission to access storage")
                                            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    Intent intent = new Intent();
                                                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                                    intent.setData(Uri.fromParts("package", getPackageName(), null));
                                                    startActivityForResult(intent, 51);
                                                }
                                            })
                                            .setNegativeButton("Cancel", null)
                                            .show();
                                }
                            }

                            @Override
                            public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                                token.continuePermissionRequest();
                            }
                        })
                        .check();
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            CropImage.ActivityResult result2 = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                final Uri resultUri = result.getUri();
                final Uri resultUri2 = result2.getUri();
                civProfile.setImageURI(resultUri);

                btnConfirm.setVisibility(View.VISIBLE);
                btnSubmit.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        final String name = editTextName.getText().toString().trim();
                        final String email = editTextEmail.getText().toString().trim();
                        final String password = editTextPassword.getText().toString().trim();
                        final String phone = editTextMobile.getText().toString().trim();
                        final String address = editTextAddress.getText().toString().trim();
                        final String occupation = editTextOccupation.getText().toString().trim();


                        File imageFile = new File(resultUri.getPath());
                        File imageFile2 = new File(resultUri2.getPath());
                        progressDialog.show();
                        AndroidNetworking.upload(url)
                                .addMultipartFile("image1", imageFile)
                                .addMultipartFile("image2", imageFile2)
                                .addMultipartParameter("name", name)
                                .addMultipartParameter("email", email)
                                .addMultipartParameter("borrower_pass", password)
                                .addMultipartParameter("phone", phone)
                                .addMultipartParameter("address", address)
                                .addMultipartParameter("occupation", occupation)
                                .addMultipartParameter("id", String.valueOf(12))
                                .setPriority(Priority.HIGH)
                                .build()
                                .setUploadProgressListener(new UploadProgressListener() {
                                    @Override
                                    public void onProgress(long bytesUploaded, long totalBytes) {
                                        float progress = (float) bytesUploaded / totalBytes * 100;
                                        progressDialog.setProgress((int) progress);
                                    }
                                })
                                .getAsString(new StringRequestListener() {
                                    @Override
                                    public void onResponse(String response) {
                                        try {
                                            progressDialog.dismiss();
                                            JSONObject jsonObject = new JSONObject(response);
                                            int status = jsonObject.getInt("status");
                                            String message = jsonObject.getString("message");
                                            if (status == 0) {
                                                Toast.makeText(RegisterActivity.this, "Unable to upload image: " + message, Toast.LENGTH_SHORT).show();
                                            } else {
                                                Toast.makeText(RegisterActivity.this, message, Toast.LENGTH_SHORT).show();
                                            }
                                        } catch (JSONException e) {
                                            e.printStackTrace();
                                            Toast.makeText(RegisterActivity.this, "Parsing Error", Toast.LENGTH_SHORT).show();
                                        }
                                    }

                                    @Override
                                    public void onError(ANError anError) {
                                        progressDialog.dismiss();
                                        anError.printStackTrace();
                                        Toast.makeText(RegisterActivity.this, "Error Uploading Image", Toast.LENGTH_SHORT).show();
                                    }
                                });
                    }
                });
            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                Exception error = result.getError();
            }
        }
    }

}

Я использую btnNidBack и ivPick для выбора файлов, но не понимаю, как передать их URL и хранить их в быстрой android сети. Это код php, который я использую.

<?php
    require_once 'dbDetails.php';

$target_dir = "image/";
//Getting the server ip 
$server_ip = gethostbyname(gethostname());

$upload_url = 'http://'.$server_ip.'/imageUpload/'; 

$target_file = $target_dir . time()."-".basename($_FILES["image"]["name"]);
$target_file2 = $target_dir . time()."-".basename($_FILES["nid_back"]["name"]);

$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file , PATHINFO_EXTENSION));
$imageFileType2 = strtolower(pathinfo($target_file2 , PATHINFO_EXTENSION));

$check = getimagesize($_FILES["image"]["tmp_name"]);

$response = array();
$error = "";

if($_SERVER['REQUEST_METHOD']=='POST'){
    $email = $_POST['email'];
            //$password = $_POST['password'];
            $password = md5($_POST['borrower_pass']);
            $name = $_POST['name'];
            $phone = $_POST['phone'];
            $address = $_POST['address'];
            $occupation = $_POST['occupation'];
    if($check != false){
        $uploadOk = 1;
    }
    else{
        $uploadOk = 0;
        $error .= "Uploaded file is not a valid image. ";
    }

    if($imageFileType !="jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif"){
        $uploadOk = 0;
        $error .= "Image type is not supported";
    }
    else{
        $uploadOk = 1;

        $file_url = $upload_url.$target_file;
        $file_url2 = $upload_url.$target_file2;
    }

    if($uploadOk == 0){
        $response['status'] = 0;
        $response['message'] = $error;
    }
    else{
        $sql = "INSERT INTO borrower (name, email, borrower_pass, phone, address, occupation, image1, image2) VALUES ('$name','$email','$password','$phone','$address','$occupation','$file_url', '$file_url2');";


        if(mysqli_query($conn,$sql)){

            //filling response array with values 
            $response['error'] = false; 
            $response['image1'] = $file_url;
            $response['image2'] = $file_url2;
            $response['name'] = $name;
            $response['email'] = $email;
            $response['borrower_pass'] = $password;
            $response['phone'] = $phone;
            $response['address'] = $address;
            $response['occupation'] = $occupation;
        }
        if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file) && move_uploaded_file($_FILES["nid_back"]["tmp_name"], $target_file2)){

            $userId = $_POST["id"];
            $response['status'] = 1;
            $response['message'] = "Image uploaded successfully";

        }
        else{
            $response['status'] = 0;
            $response['message'] = "Unable to upload image to server";
        }
    }

    echo json_encode($response);
}

?>

Я не понимаю, как написать код android и PHP для решения этой проблемы. Он загружает только один файл на сервер, но я хочу загрузить два файла на сервер одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...