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

未将图片上载到Firebase存储

柳修平
2023-03-14

我想上传图片到存储区。每次我启动我的模拟器时,我都没有错误,而且一切都运行得很好,只是当我在模拟器中选择图片并上传它们时,即使在我刷新之后,它也不会显示在Firebase存储区中。下面是我的代码:

    package com.safariagaming;

import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.safariagaming.mtc_project.R;

public class Account_Page extends AppCompatActivity {

    private Button mSelectImage;

    private StorageReference mStorage;

    private static final int GALLERY_INTENT = 2;

    private ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account__page);

        mSelectImage = (Button) findViewById(R.id.selectImage_BUTTON);

        mStorage = FirebaseStorage.getInstance().getReference(); //.child at end ifyou want to add an child to it

        mProgressDialog = new ProgressDialog(this);


        mSelectImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(Intent.ACTION_PICK);

                intent.setType("image/*");

                startActivityForResult(intent, GALLERY_INTENT);

            }
        });

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK){

            mProgressDialog.setMessage("Uploading...");

            Uri uri = data.getData();

            StorageReference filepath = mStorage.child("Photos").child(uri.getLastPathSegment());

            filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                    Toast.makeText(Account_Page.this, "Upload Done", Toast.LENGTH_LONG).show();

                mProgressDialog.dismiss();
                }//you can also add onFaliure listener
            });


        }

    }
}

共有1个答案

宗政燕七
2023-03-14

将文件作为流而不是Uri放入存储删除Uri部分并放入以下内容:

InputStream inputStream = this.getContentResolver().openInputStream(data.getData());

并使用putFile(inputStream)更改putFile(uri),还可以考虑使用一个合理的文件名(如your_name.png)更改uri.getLastPathSegment()部分(请注意,即使您的照片不是png格式,根据我的经验,这种格式可以工作)
这应该可以工作

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

  • 我试图构建一个,它包括两个按钮,一个用于用相机拍照并上传到Firebase存储,另一个用于从Firebase存储下载图像并在上显示。 现在,我被上传功能卡住了。我可以把照片保存到应用程序目录中。我想上传保存的图片到Firebase存储。

  • 我想在上传到Firebase存储之前调整图像的大小。 我的问题是:FireBase在其Uri上上传图像。我从图库意图中获取图像,并将其放在上,然后像这样调整其大小: firebase根据Uri像这样上传它(如果有其他上传文件的方法,它将非常有用!): 有没有办法获取

  • 我想在上传到Firebase存储之前减小图像文件大小,因为上传需要很长时间。 这是conatins编辑文本图像视图的表单 单击“保存”按钮时,我同时保存数据(在实时数据库中)和图像(存储)。 那么如何减少图像大小或压缩它呢??

  • 但事实证明,Firebase无法从服务器端上传文件,正如它在文档中明确说明的那样: Firebase存储不包括在服务器端Firebase npm模块中。相反,您可以使用gcloud Node.js客户机。 我的第二次尝试是使用库,就像文档中提到的: