Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何直接从摄像头上传文件并将其作为多部分发送,而无需具有写入或读取权限?_Android_Permissions_Camera_Multipart - Fatal编程技术网

Android 如何直接从摄像头上传文件并将其作为多部分发送,而无需具有写入或读取权限?

Android 如何直接从摄像头上传文件并将其作为多部分发送,而无需具有写入或读取权限?,android,permissions,camera,multipart,Android,Permissions,Camera,Multipart,嗨,我正在努力寻找一种方法,将文件直接从android手机摄像头上传到我的web服务器(接受多部分) 由于我国对fintech应用程序的规定,我不允许向用户请求写入和读取存储权限,因此我必须在拍照后直接上传,而不将其保存在存储中 这就是我现在拥有的 profileCameraImageButton.setOnClickListener(new View.OnClickListener() { @Override pu

嗨,我正在努力寻找一种方法,将文件直接从android手机摄像头上传到我的web服务器(接受多部分)

由于我国对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);
                    }    
除了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;
    }
每次我试图上传到我的Web服务器,它总是告诉我它不能接受文件格式。有时我看到我需要在日志中写入许可


非常感谢您的帮助

从外部存储读取和写入需要权限,这是一种危险的权限,需要用户在运行时接受


解决方法是将图像保存到
内部存储器
,而不是外部存储器。这不需要用户的权限,您可以将其用作文件并将其上载到服务器。链接显示如何将位图保存和读取到内部存储器。

上载图像需要一个需要保存到存储器中的真实文件,如果不将图像保存到存储器中,则无法上载图像。此解决方案将在不将文件保存到外部存储器的情况下提供帮助。如果此答案对您有帮助,请将其标记为正确答案。您好,非常感谢您的回复。我仍然不知道应该将saveToInternalStorage函数放在代码中的什么位置。照相机拍照后,它是否处于活动状态?我怎样才能从相机上得到位图文件格式呢?嗨,哈立德,我已经根据你的建议成功上传了文件。非常感谢你的帮助。只有一个问题,图片质量很低,图片很模糊。我认为默认质量100已经是我认为最高的了?你知道如何解决这个问题吗?很抱歉,原来我只能得到图像本身的缩略图,我仍然无法得到完整的图像