【问题标题】:Cannot upload image on FirebaseStorage无法在 FirebaseStorage 上上传图片
【发布时间】:2021-07-22 23:55:42
【问题描述】:

我无法在 Firebase 存储上上传个人资料图片。 我正在从吐司中打印错误。 为什么会这样?我无法解决问题,我多次查看我的代码。 可能是什么问题,我该如何调整我的代码以使其正常工作? 提前感谢大家。

public class ProfiloUtenteActivity extends AppCompatActivity {

    private ImageView mImageBtn;
    private ImageView mSettingsBtn, mPersonalReviewsBtn, mShowFriendsBtn;
    private CircleImageView mProfileImage;
    private TextView mMailAcc, mUsernameAcc;

    private static final int GALLERY_PICK = 1;

    private DatabaseReference mUserDatabase;
    private FirebaseUser mCurrentUser;
    private ProgressDialog mProgress;

    private StorageReference mImageStorage;
    private String myUri = "";
    private Uri imageUri;

    FirebaseAuth auth;

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

        mShowFriendsBtn = findViewById(R.id.imageShowFriends);
        mPersonalReviewsBtn = findViewById(R.id.imagePersonalReviews);
        mSettingsBtn = (ImageView) findViewById(R.id.imageViewSettings);
        mImageBtn = (ImageView) findViewById(R.id.change_image_btn);
        mProfileImage = (CircleImageView) findViewById(R.id.profile_image);
        mMailAcc = (TextView) findViewById(R.id.textViewMailAcc);
        mUsernameAcc = (TextView) findViewById(R.id.textView7);

        auth = FirebaseAuth.getInstance();

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid();

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("utenti").child(current_uid);
        mImageStorage = FirebaseStorage.getInstance().getReference();

mImageBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(galleryIntent, "Seleziona una foto"), GALLERY_PICK);

            }
        });


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

        if(requestCode == GALLERY_PICK && resultCode == RESULT_OK) {
            imageUri = data.getData();

            CropImage.activity()
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1, 1)
                    .start(this);

        }

        if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            Uri resultUri = result.getUri();

                StorageReference filepath = mImageStorage.child("profile_images").child("1wq");

                filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if(task.isSuccessful()) {
                            Toast.makeText(ProfiloUtenteActivity.this, "Funziona", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(ProfiloUtenteActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            
        }
    } 
} 

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    Task 失败时,它包含一个异常,其中包含有关失败的更多信息。可让您找出问题原因的日志记录:

    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
        if(task.isSuccessful()) {
            Toast.makeText(ProfiloUtenteActivity.this, "Funziona", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(ProfiloUtenteActivity.this, "Error", Toast.LENGTH_SHORT).show();
            Log.e("Upload", "Upload failed", task.getException());
        }
    }
    

    一旦您收到错误消息,我建议您搜索它可能已经有人处理过。

    【讨论】:

    • 谢谢。在 logcat 中,它显示错误代码 403 权限被拒绝。在 Firebase 存储中,我的规则如下(使用此规则,它仍然表示权限被拒绝)。 rules_version = '2'; service firebase.storage { match /b/test-b-default-rtdb.firebaseio.com/o { match /{allPaths=**} { // Allow access by all users allow read, write; } } }
    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2019-05-31
    • 2020-11-27
    • 2023-03-16
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多