简体   繁体   English

在 Firebase 存储上上传图像

[英]Upload Image on Firebase Storage

Hi I want to add an image on firebase storage with android studio but firebase doesn't accept my upload.嗨,我想用 android 工作室在 firebase 存储上添加图像,但 firebase 不接受我的上传。 I changed the rule to allow the write and read and my match folder allows all path.Thus I am confused.我更改了规则以允许写入和读取,并且我的匹配文件夹允许所有路径。因此我很困惑。 Here is the part of my code who should put the image in my database.这是我的代码中应该将图像放入我的数据库的部分。 If you know how to resolve this problem i would be glad to ear a solution如果您知道如何解决此问题,我将很高兴听到解决方案

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            image_uri = data.getData();
            uploadPicture();
            ProfileImage.setImageURI(image_uri);

        }
    }
private void uploadPicture() {
        final ProgressDialog pd = new ProgressDialog(this);
        pd.setTitle("Uploading Image...");
        pd.show();
        final String randomKey = UUID.randomUUID().toString();
        StorageReference riversRef = storageReference.child(("images/" + randomKey + ".jpg"));


        Toast.makeText(Create_Profile.this, "Upload success", Toast.LENGTH_SHORT).show();

        riversRef.putFile(image_uri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        pd.dismiss();
                        name = riversRef.getDownloadUrl().toString();
                    }
                }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
                double progressPercent = (100.00 * snapshot.getBytesTransferred() / snapshot.getTotalByteCount());
                pd.setMessage("Percentage: " + (int) progressPercent + "%");
            }
        });
    }
  • if you don't getting error compare with this simple code如果你没有得到错误与这个简单的代码比较
    thank you谢谢你

firebase storage dependency firebase 存储依赖

implementation 'com.google.firebase:firebase-storage:19.1.0'

activity_main.xml: activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">

<!--Linear Layout with horizontal orientation
and other properties-->
<LinearLayout
android:id="@+id/layout_button"
android:orientation="horizontal"
android:layout_alignParentTop="true"
android:weightSum="2"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<!--Button for choosing image from gallery-->
<Button
    android:id="@+id/btnChoose"
    android:text="Choose"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" />

<!--Button for uploading image-->
<Button
    android:id="@+id/btnUpload"
    android:text="Upload"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" />
</LinearLayout>

<!--Image View for showing image choosen from gallery-->
<ImageView
    android:id="@+id/imgView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</RelativeLayout>

in your Activity在您的活动中

public class MainActivity extends AppCompatActivity {

private Button btnSelect, btnUpload;
private ImageView imageView;
private Uri filePath;
private final int PICK_IMAGE_REQUEST = 22;
FirebaseStorage storage;
StorageReference storageReference;

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

    ActionBar actionBar;
    actionBar = getSupportActionBar();
    ColorDrawable colorDrawable
            = new ColorDrawable(
            Color.parseColor("#0F9D58"));
    actionBar.setBackgroundDrawable(colorDrawable);


    btnSelect = findViewById(R.id.btnChoose);
    btnUpload = findViewById(R.id.btnUpload);
    imageView = findViewById(R.id.imgView);
    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();

    btnSelect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            SelectImage();
        }
    });

    btnUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            uploadImage();
        }
    });
}

private void SelectImage()
{

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(
            Intent.createChooser(
                    intent,
                    "Select Image from here..."),
            PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode,
                                int resultCode,
                                Intent data)
{

    super.onActivityResult(requestCode,
            resultCode,
            data);
    if (requestCode == PICK_IMAGE_REQUEST
            && resultCode == RESULT_OK
            && data != null
            && data.getData() != null) {

        // Get the Uri of data
        filePath = data.getData();
        try {

            Bitmap bitmap = MediaStore
                    .Images
                    .Media
                    .getBitmap(
                            getContentResolver(),
                            filePath);
            imageView.setImageBitmap(bitmap);
        }

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

private void uploadImage()
{
    if (filePath != null) {

        ProgressDialog progressDialog
                = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        StorageReference ref
                = storageReference
                .child(
                        "images/"
                                + UUID.randomUUID().toString());

        ref.putFile(filePath)
                .addOnSuccessListener(
                        new OnSuccessListener<UploadTask.TaskSnapshot>() {

                            @Override
                            public void onSuccess(
                                    UploadTask.TaskSnapshot taskSnapshot)
                            {

                                progressDialog.dismiss();
                                Toast
                                        .makeText(MainActivity.this,
                                                "Image Uploaded!!",
                                                Toast.LENGTH_SHORT)
                                        .show();
                            }
                        })

                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e)
                    {

                        progressDialog.dismiss();
                        Toast
                                .makeText(MainActivity.this,
                                        "Failed " + e.getMessage(),
                                        Toast.LENGTH_SHORT)
                                .show();
                    }
                })
                .addOnProgressListener(
                        new OnProgressListener<UploadTask.TaskSnapshot>() {

                            @Override
                            public void onProgress(
                                    UploadTask.TaskSnapshot taskSnapshot)
                            {
                                double progress
                                        = (100.0
                                        * taskSnapshot.getBytesTransferred()
                                        / taskSnapshot.getTotalByteCount());
                                progressDialog.setMessage(
                                        "Uploaded "
                                                + (int)progress + "%");
                            }
                        });
    }
}
}

I found a solution by modifying my firebase Rules to match with the bucket directly and not with the ref of my firebase storage我通过修改我的 firebase 规则以直接与存储桶匹配而不是与我的 firebase 存储的引用找到了解决方案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM