Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

StorageException has occurred. Object does not exist at location. Code: -13010 HttpResult: 404

I made a simple android app to upload images on Firebase. everything working fine, image uploading successfully to firebase storage. But, I'm getting this error while fetching URL from firebase.

StorageException has occurred. The object does not exist at the location. Code: -13010 HttpResult: 404

I found out most of the previous questions and answers but they didn't work for me. thanks in advance.

package com.pk.hotandcool.activities;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.fxn.pix.Options;
import com.fxn.pix.Pix;
import com.fxn.utility.ImageQuality;
import com.fxn.utility.PermUtil;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageMetadata;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.pk.hotandcool.R;

import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.ArrayList;

public class Test extends AppCompatActivity {

    private static final String TAG = "Test";
    private RecyclerView recyclerView;
    private MyAdapter myAdapter;
    private Options options;
    private ArrayList<String> returnValue = new ArrayList<>();
    private GridLayoutManager gridLayoutManager;
    int imageCount = 0;
    private FirebaseAuth mAuth;
    private String currentUid;
    private DatabaseReference userMediaDb;
    private StorageReference filePath;
    private StorageMetadata metadata;

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

        initViews();
        initFirebase();

        recyclerView.setLayoutManager(gridLayoutManager);
        myAdapter = new MyAdapter(this);

        options = Options.init()
                .setRequestCode(100)
                .setCount(9)
                .setFrontfacing(false)
                .setImageQuality(ImageQuality.LOW)
                .setPreSelectedUrls(returnValue)
                .setScreenOrientation(Options.SCREEN_ORIENTATION_PORTRAIT)
                .setPath("DCIM/pk");

        recyclerView.setAdapter(myAdapter);

        findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                options.setPreSelectedUrls(returnValue);
                Pix.start(Test.this, options);
            }
        });
    }

    private void initFirebase() {
        currentUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        userMediaDb = FirebaseDatabase.getInstance().getReference().child("Users")
                .child(currentUid)
                .child("media");
    }

    private void initViews() {
        recyclerView = findViewById(R.id.recyclerView);

        gridLayoutManager = new GridLayoutManager(this, 3);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100) {
            if (resultCode == Activity.RESULT_OK) {
                returnValue = data.getStringArrayListExtra(Pix.IMAGE_RESULTS);
                if (returnValue != null) {
                    myAdapter.addImages(returnValue);
                    if (returnValue.size() > 0) {
                        uploadMediaToFirebase(returnValue);
                    }
                }
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) {
        if (requestCode == PermUtil.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS) {// If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Pix.start(Test.this, options);
            } else {
                Toast.makeText(Test.this, "Approve permissions to open Pix ImagePicker", Toast.LENGTH_LONG).show();
            }
            return;
        }
    }


    public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
        private ArrayList<String> list = new ArrayList<>();
        private Context context;

        MyAdapter(Context context) {
            this.context = context;
        }

        void addImages(ArrayList<String> list) {
            this.list.clear();
            this.list.addAll(list);
            notifyDataSetChanged();
        }

        @NotNull
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).
                    inflate(R.layout.pix_image_layout, parent, false);
            return new Holder(v);
        }

        @Override
        public void onBindViewHolder(@NotNull RecyclerView.ViewHolder holder, int position) {
            File f = new File(list.get(position));
            Bitmap d = new BitmapDrawable(context.getResources(), f.getAbsolutePath()).getBitmap();
            ((Holder) holder).iv.setImageBitmap(d);
        }

        @Override
        public int getItemCount() {
            return list.size();
        }

        class Holder extends RecyclerView.ViewHolder {
            ImageView iv;

            Holder(View itemView) {
                super(itemView);
                iv = itemView.findViewById(R.id.iv);
            }
        }
    }

    private void uploadMediaToFirebase(ArrayList<String> images) {

        filePath = FirebaseStorage.getInstance().getReference()
                .child("users")
                .child(currentUid)
                .child("media");

        metadata = new StorageMetadata.Builder()
                .setContentType("image/jpg")
                .build();

        for (int i = 0; i < images.size(); i++) {
            String image = images.get(i);
            final File file = new File(image);
            uploadImages(filePath, metadata, file);
        }
    }

    private void uploadImages(final StorageReference filePath, StorageMetadata metadata, File file) {
        UploadTask uploadTask = filePath.child(file.getName()).putFile(Uri.fromFile(file), metadata);

        uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "onComplete: uploaded successfully" + task.getResult().toString());
                } else {
                    Log.d(TAG, "onComplete: upload failed" + task.getResult().toString());
                }
            }
        });

        Task<Uri> task = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()) {
                    Log.d(TAG, "then: " + task.getResult());
                    if (task.getException() != null)
                        throw task.getException();
                }
                Log.d(TAG, "then: " + filePath.getDownloadUrl().toString());
                return filePath.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    Log.d(TAG, "onComplete: download uri" + downloadUri.toString());
                } else {
                    if (task.getException() != null)
                        Log.e(TAG, "onComplete: getting url failed");
                    Log.d(TAG, "onComplete: download url : " + task.getResult());
                    task.getException().printStackTrace();
                }
            }
        });
    }
}
like image 933
Pankaj Tungaria Avatar asked Dec 21 '25 03:12

Pankaj Tungaria


1 Answers

I made a mistake i returned task.getDownloadUrl() instead of reference.getDownloadUrl so i changed the line

UploadTask uploadTask = filePath.child(file.getName()).putFile(Uri.fromFile(file), metadata);

into

StorageReference reference = filePath.child(file.getName());
UploadTask uploadTask = reference.putFile(Uri.fromFile(file), metadata);

and return

return filePath.getDownloadUrl();
like image 166
Pankaj Tungaria Avatar answered Dec 23 '25 17:12

Pankaj Tungaria