当前位置: 首页 > 知识库问答 >
问题:

上传图像到Firebase存储,从摄像头android

丁勇
2023-03-14

我有一个问题与我的代码,我必须上传图像到Firebase存储,我需要的图像来自画廊和相机,从画廊的图像是好的,但来自相机的图像给问题,图像加载在ImageView和被发送到数据库是黑色的。有人知道如何解决这个问题吗,或者你知道任何其他加载图像的方法吗?

//Funçao de escolha das opcoes de upload---------------------------------------------------------
private void jeitoImagem() {

    final CharSequence[] jeito = {"Camera", "Galeria", "Cancelar"};

    //Alert Dialog com as opçoes de escolha-----------------------------------------------------
    AlertDialog.Builder b = new AlertDialog.Builder(CadastroEmpresaActivity.this, R.style.Theme_AppCompat_Light_Dialog_Alert);
    b.setTitle("Adicionar imagem");
    b.setItems(jeito, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            if(jeito[i].equals("Camera")){
                abrirCamera();

            } else if(jeito[i].equals("Galeria")){
                abrirGaleria();

            } else if(jeito[i].equals("Cancelar")){
                dialogInterface.dismiss();
            }

        }
    });

    b.create();
    b.show();



}

//Funçao de upar imagem da galeria--------------------------------------------------------------
public void abrirGaleria() {
    Intent i = new Intent(Intent.ACTION_PICK);
    i.setType("image/*");
    startActivityForResult(i,GALERIA);
}

//Funçao de upar imagem da camera---------------------------------------------------------------
public void abrirCamera() {
    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(i, CAMERA);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //passando o data pra variavel uri----------------------------------------------------------
    uri = data.getData();

    //Verificando a opçao que foi selecionada---------------------------------------------------

来自画廊

    if(requestCode == GALERIA && resultCode == RESULT_OK && uri != null){
        //Chamando instancia do Storage---------------------------------------------------------
        storageReference1 = FirebaseStorage.getInstance().getReference();
        try {
            //Setando imagem no imageView-------------------------------------------------------
            Bitmap b = MediaStore.Images.Media.getBitmap(CadastroEmpresaActivity.this.getContentResolver(), uri);
            imagem.setImageBitmap(b);

            //Chamando o Storage pra salvar a imagem--------------------------------------------
            StorageReference ref  = storageReference1.child("Usuario" + System.currentTimeMillis() +".MiBuy");

            ref.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    //Passando url da imagem pra variavel---------------------------------------
                    urlImage = taskSnapshot.getDownloadUrl().toString();

                    //Alert Dialog de aviso do upload da imagem---------------------------------
                    AlertDialog.Builder b = new AlertDialog.Builder(CadastroEmpresaActivity.this, R.style.Theme_AppCompat_Light_Dialog_Alert);
                    b.getContext();
                    b.setTitle(R.string.upload_imagem);
                    b.setMessage(R.string.texto_upload_imagem);
                    b.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.dismiss();

                        }
                    });
                    b.create();
                    b.show();




                }
            });




        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //Verificando a opçao que foi selecionada---------------------------------------------------

从相机

     if (requestCode == CAMERA && resultCode == RESULT_OK){
        //Chamando instancia do Storage---------------------------------------------------------
        storageReference2 = FirebaseStorage.getInstance().getReference();
        //Caminho da URL------------------------------------------------------------------------
        StorageReference mref = storageReference2.child("Usuario"+ System.currentTimeMillis()+"MiBuy");

        //Liberando cache nas imagens-----------------------------------------------------------
        imagem.setDrawingCacheEnabled(true);
        imagem.buildDrawingCache();

        //Criando bitmap------------------------------------------------------------------------

        Bitmap bitmap = imagem.getDrawingCache();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] dd = baos.toByteArray();

        //Upando a imagem pro firebase----------------------------------------------------------
        UploadTask uploadTask = mref.putBytes(dd);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                //Alert Dialog de aviso de erro no upload da imagem-----------------------------
                AlertDialog.Builder b = new AlertDialog.Builder(CadastroEmpresaActivity.this, R.style.Theme_AppCompat_Light_Dialog_Alert);
                b.getContext();
                b.setTitle(R.string.erro_upload_imagem);
                b.setMessage(R.string.texto_erro_upload_imagem);
                b.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();

                    }
                });
                b.create();
                b.show();
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                //Alert Dialog de aviso do upload da imagem-------------------------------------
                AlertDialog.Builder b = new AlertDialog.Builder(CadastroEmpresaActivity.this, R.style.Theme_AppCompat_Light_Dialog_Alert);
                b.getContext();
                b.setTitle(R.string.upload_imagem);
                b.setMessage(R.string.texto_upload_imagem);
                b.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();

                    }
                });
                b.create();
                b.show();

                //Passando url da imagem pra variavel-------------------------------------------
                Uri ddownload = taskSnapshot.getDownloadUrl();
                urlImage = taskSnapshot.getDownloadUrl().toString();

                //Colocando imagem no imageView
                Picasso.with(CadastroEmpresaActivity.this).load(ddownload).into(imagem);

            }
        });


    }

}

共有1个答案

谷奕
2023-03-14

用于启动相机应用的意图仅返回缩略图,您可以从返回的数据中获得缩略图:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        ...
        mImageView.setImageBitmap(imageBitmap);
    }
}

如果您想获得一个全尺寸的图像,您必须创建一个文件来保存该图像,为该文件创建一个URI,并将URI作为额外内容添加到意图中。这在留档中描述。

 类似资料:
  • 我有一个按钮,它向用户提供选择,他是否想要从画廊或相机的图像。当用户从图库拍摄图像时,我能够成功地将图像上传到Firebase存储,但是当用户选择相机时,我无法将图像上传到存储。这是用户选择相机时的onActivityResult代码 它将图像上传到我的imageview,但给我错误提示 当我尝试上载到存储时 我在stack overflow上遇到了一个类似的问题。 我认为公认的答案是错误的,因为

  • 我正在尝试用相机拍照并上传到Firebase。我使用AlertDialog询问用户是否想要使用相机或从图库中选择图像。我可以用相机拍照,但是当我试图上传图像时,它说找不到图像。 以下是我的图像选择方法: 下面是我上传图片的方法: 提前感谢任何帮助的朋友。

  • 我正在开发一个简单的博客应用程序,允许用户将照片从手机图库和描述上传到Firebase服务器。我正在尝试修改我的当前项目,以允许用户从照相机捕获照片并将其上载到firebase服务器。 目前,我能够将我捕获的图像显示到Image按钮中,但是我无法将我的图像发布到Firebase服务器(提交发布按钮不会对我的点击功能做出反应)。 我怀疑我的startPosting()函数中有错误,或者我没有正确编码

  • 我从Firebase存储中获取图像,用相机拍照,或者从图书馆中挑选一张。当其中一个完成时,我有一个类来存储,以便在需要时使用它。 现在我需要将此图像上传到Firebase存储(修改或新建,无所谓)。Firebase允许我使用以下选项之一:或,每个选项分别需要或。 我怎么能把我的,并从它获得一个或用于上传? -- 或者,为了解决这个问题,当我从Firebase存储中检索图像时,如何获取图像的? 无论

  • 我想将相机拍摄的图像上传到firebase存储。我知道如何存储图像,一旦我得到图像的Uri格式,但我从相机活动得到位图。所以我需要知道怎么做? 我使用函数uploadFile()将图像的Uri存储到firebase存储,然后获取图像的url以将其存储在firebase实时数据库中。但是我需要将位图转换为Uri吗?如果是,如何进行?我发现的代码不起作用,如果有其他方法,请告诉我 谢谢您的时间:)

  • 我试图上传一个图像文件,我得到了使用Imagepicker。 但上面的代码返回以下错误 VERBOSE-2:ui\u dart\u状态。cc(186)]未处理的异常:MissingPluginException(未找到方法任务的实现#通道插件上的startPutFile.flatter.io/firebase_存储)#0 MethodChannel_invokeMethod包:flatter/..