如何直接从相机上传文件并将其作为多部分发送而无需写入或读取权限?

How to upload a file directly from camera and send it as a multipart without having write or read permissions?

您好,我正在努力寻找一种方法将文件直接从 android phone 相机上传到我的网络服务器(接受多部分)。

由于我所在国家/地区对金融科技应用程序的规定,我不允许向用户询问写入和读取存储权限,因此我必须在拍照后直接上传而不保存在存储中。

这是我目前拥有的。

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);
                    }    

还有multipart的创建方法,我只是把上面代码得到的profileFile传到这里

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.

中的写权限

非常感谢您的帮助

从外部存储读取和写入需要权限,这是一个危险的权限,需要在运行时得到用户的同意。

解决方案是将图像保存到 internal storage 而不是外部存储。这不需要用户的许可,您可以将其用作文件并将其上传到服务器。 this link 显示如何将位图保存和读取到内部存储。