Как загрузить файл прямо с камеры и отправить его как составную часть, не имея разрешения на запись или чтение? - PullRequest
0 голосов
/ 20 ноября 2018

Привет, я изо всех сил пытаюсь найти способ загрузить файл непосредственно с камеры телефона Android на мой веб-сервер (принять multipart).

В соответствии с правилами, установленными в моей стране для приложений fintech, мне не разрешается запрашивать у пользователя разрешения на запись и чтение, поэтому мне приходится загружать его сразу после съемки фотографий без сохранения в хранилище.

Это то, что у меня сейчас есть.

profileCameraImageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(areAllPermissionsGranted()) {
                            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                                profileFile = new File(getActivity().getApplicationContext().getExternalFilesDir(
                                        android.os.Environment.DIRECTORY_PICTURES).getAbsolutePath() + File.separator + "profile.jpg");
                                profileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(),
                                        authorities,
                                        profileFile);
                                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, profileUri);
                                startActivityForResult(takePictureIntent, PICK_CAMERA_PROFILE);
                    }    

Помимо метода создания нескольких частей, я просто передал сюда файл профиля, полученный из приведенного выше кода

public MultipartBody.Part prepareFilePartFromCamera(String partName, File file) {

        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
        return body;
    }

Каждый раз, когда я пытался загрузить файл на свой веб-сервер, он всегда сообщаетмне, что он не может принять формат файла.Иногда я видел, что мне нужно разрешение на запись в моей logcat.

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 20 ноября 2018

Чтение и запись из внешнего хранилища требует разрешения, которое является опасным разрешением и требует принятия от пользователя во время выполнения.

Решение для этого заключается в сохранении образа в internal storage вместо внешнего хранилища.Это не требует разрешения от пользователя, и вы можете использовать его как файл и загрузить его на сервер. эта ссылка показывает, как сохранить и прочитать растровое изображение во внутреннем хранилище.

...