我无法从 firebase 获取下载网址()。请任何人帮助这是我的代码和错误。 (我正在使用片段)[重复]

Posted

技术标签:

【中文标题】我无法从 firebase 获取下载网址()。请任何人帮助这是我的代码和错误。 (我正在使用片段)[重复]【英文标题】:I am not able to getdownloadurl() from firebase. Please anybody help here's my code and error. (I am using Fragment) [duplicate] 【发布时间】:2021-08-07 18:25:09 【问题描述】:

这是我的代码:

 private void uploadFile() 
    //checking if file is available
    if (filePath != null) 
        //displaying progress dialog while image is uploading
        final ProgressDialog progressDialog = new ProgressDialog(getContext());
        progressDialog.setTitle("Uploading");
        progressDialog.show();

        //getting the storage reference
        StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "."
                + getFileExtension(filePath));

        UploadTask uploadTask = storageReference.putFile(filePath);

        Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() 
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception 
                if (!task.isSuccessful()) 
                    throw task.getException();
                

                // Continue with the task to get the download URL
                return sRef.getDownloadUrl();
            
        ).addOnCompleteListener(new OnCompleteListener<Uri>() 
            @Override
            public void onComplete(@NonNull Task<Uri> task) 
                if (task.isSuccessful()) 
                    Uri downloadUri = task.getResult();

                    Postmember postmember = new Postmember();
                    DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();

                    postmember.setType("iv");

                    String id = mDatabase.push().getKey();
                    mDatabase.child(id).setValue(postmember);


                 else 
                    // Handle failures
                    // ...
                
            
        );
    


这是我的错误:

E/StorageException: StorageException has occurred.
An unknown error occurred, please check the HTTP result code and inner exception for server response.
 Code: -13000 HttpResult: 0

E/StorageException:无法上传到 getRoot。您应该上传到存储位置,例如 .getReference('image.png').putFile... java.lang.IllegalArgumentException:无法上传到 getRoot。您应该上传到存储位置,例如 .getReference('image.png').putFile... 在 com.google.firebase.storage.UploadTask.run(UploadTask.java:213) 在 com.google.firebase.storage.StorageTask.lambda$getRunnable$7$StorageTask(StorageTask.java:1072) 在 com.google.firebase.storage.-$$Lambda$StorageTask$q9YBoR_A8LB-JxTCx8JRQvabaZs.run(未知来源:2) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 在 java.lang.Thread.run(Thread.java:923)

【问题讨论】:

【参考方案1】:

以下错误:

E/StorageException:无法上传到 getRoot。您应该上传到存储位置,例如 .getReference('image.png').putFile

说得很清楚是什么问题。没有名称和文件扩展名,您无法将文件直接上传到根目录。所以给你带来麻烦的那一行是:

UploadTask uploadTask = storageReference.putFile(filePath);

没有看到storageReference 对象是如何定义的,我可以说它很可能指向根目录。要解决这个问题,你应该把上面这行代码改成:

StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "."
            + getFileExtension(filePath));
UploadTask uploadTask = sRef.putFile(filePath);

所以应该使用的正确对象是sRef,因为它指向正确的路径而不是 storageReference

【讨论】:

嘿 Alex mamo 我解决了这个问题,但我知道我有一个非常奇怪的问题,当我尝试上传图像或文件时,我得到了这个错误。错误 - W/NetworkRequest:请求没有验证令牌 请求没有应用检查令牌。错误-W/NetworkRequest:请求没有验证令牌 请求没有应用检查令牌。我从不在我的应用程序中要求身份验证 很高兴听到您解决了这个问题。 这听起来像是一个新问题,基本上应该被视为另一个问题,因为它无法在评论中回答。所以为了遵守这个社区的规则,请使用它自己的MCVE 发布一个新问题,以便我和其他 Firebase 开发人员可以帮助你。 您好先生,请进一步检查我的问题-***.com/questions/67590025/…

以上是关于我无法从 firebase 获取下载网址()。请任何人帮助这是我的代码和错误。 (我正在使用片段)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

下载 Firebase 存储数据时,DispatchGroup 未正确执行

无法从 firebase 获取过去 30 天的数据

我无法从 Firebase (Java) 获取特定数据

无法从 iOS 中的 firebase 获取时间戳?

从多个文件上传 Firebase 存储中获取下载 url

无法从Firebase获取价值