Firebase Storage在尝试上传图片时提供StorageException

时间:2016-05-31 10:21:33

标签: google-app-engine firebase firebase-storage

我一直在尝试将图片上传到新的firebase存储服务。它正在抛出StorageException

  

E / StorageException:发生了StorageException。                                                                           发生未知错误,请检查HTTP结果代码和内部   服务器响应的异常。                                                                            代码:-13000 HttpResult:400

     

E / StorageException:服务器已终止上传会话                                                                           java.io.IOException:服务器已终止上载会话                                                                               在com.google.firebase.storage.UploadTask.zzVi(未知来源)                                                                               在com.google.firebase.storage.UploadTask.zzVh(未知来源)                                                                               在com.google.firebase.storage.UploadTask.run(未知来源)                                                                               在com.google.firebase.storage.StorageTask $ 5.run(未知来源)                                                                               在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)                                                                               在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:588)                                                                               在java.lang.Thread.run(Thread.java:818)

15 个答案:

答案 0 :(得分:4)

在google firebase中,此类StorageException通常是由于错误引起的 StorageReference参考。

FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://<your-bucket-name>");

// Create a reference to "file"
StorageReference mountainsRef = storageRef.child("file.jpg");

确保正确引用该文件。

<小时/> 文档参考

Details about creating Storage reference can be found in here

Details about the Storage Exception codes can be found in here for further refrences

答案 1 :(得分:2)

我也得到了相同的例外但是通过简单地向以下应用程序授予存储权限来克服它:

设置&gt;应用&gt; {我的应用}&gt;权限&gt;启用存储

上面的部分也可以通过Java代码完成,我在Android Marshmallow的教程中学到了它。 此外,请确保在Android Manifest文件中声明INTERNET和READ_EXTERNAL_STORAGE的权限。 但是,如果您仍然收到例外,请尝试更新播放服务。

答案 2 :(得分:2)

在firebase控制台中,转到左侧的存储选项卡。单击规则选项卡并将规则设置为公共。使用以下代码将其设置为公共。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

这适用于测试目的,但是,您应该使用身份验证用户来保护数据库连接。

答案 3 :(得分:1)

我今天遇到了同样的问题。

  • 您需要拥有最新的Google Play服务。

  • 至少请在firebase控制台中启用匿名身份验证。

  • 要匿名进行身份验证的步骤。 https://unitygem.wordpress.com/xml-serialisation/

  • 您还可以在规则(控制台的存储选项卡中的JSON)中设置最小/最小身份验证(但不推荐使用,因为它不安全)。

答案 4 :(得分:1)

在firebase控制台中启用匿名身份验证。

答案 5 :(得分:1)

别忘了添加

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

在AndroidManifest.xml中

答案 6 :(得分:1)

我面临着同样的问题。我删除了现有的google.services.json文件,再次从firebase控制台下载并将其添加到我的项目中。现在,它可以正常工作。

答案 7 :(得分:1)

这可以解决我的问题,而不是一行代码更改;),我要做的就是更新firebase-storage lib。 以我为例,它是'com.google.firebase:firebase-storage:16.4.0',将其更新为'com.google.firebase:firebase-storage:17.0.0'后,一切又开始正常工作。

答案 8 :(得分:0)

当我没有在Firebase存储中创建引用的文件夹/存储桶时,我遇到了这个问题。与Firebase数据库不同,我认为(我还不确定),如果存储引用首先不存在,它将不会创建存储桶。因此,首先创建一个文件夹,然后再试一次。

答案 9 :(得分:0)

  1. 首先检查您是否已在您的清单中授予了Internet权限。

  2. 检查您是否已在存储的&#34; 规则&#34; 标签中授予了写入存储的正确授权许可。

  3. 尝试记录 Firebase存储的引用以及您尝试上传的文件。检查它是否与您在浏览器中工作的Firebase项目相同。

  4. 在我的情况下,项目配置是错误的,这几乎是我们在项目中做的第一件事。但是嘿!它比错过&#34 ;;&#34;

    更好

答案 10 :(得分:0)

我也面临着同样的情况,

  1. 从项目结构更新所有建议的依赖项
  2. 更新Google Play服务

答案 11 :(得分:0)

ionic cordova plugin remove phonegap-plugin-push

检查以上内容,最后确保您的最新 适用于最新版本的Google搜索(Android和Firebase) 'com.google.firebase:firebase-storage:19.1.1'

答案 12 :(得分:0)

我遇到了同样的问题。这不是存储权限问题,我只是更改了Firebase存储规则,然后解决了。

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

以上是可以正常工作的默认规则。更改条件可能会导致异常。使用前请检查您的状况。

答案 13 :(得分:0)

此问题可能会导致在firestore中上载时进行身份验证。您必须在Firebase存储规则的代码中删除身份验证部分。

删除并发布 :if request.auth!= null;

答案 14 :(得分:0)

无论存储引用是什么..您需要在putFile()方法中放置正确的文件URI以进行上传。