仍然出现错误 <open failed: EACCES (Permission denied)>

Still gets the error <open failed: EACCES (Permission denied)>

我已经阅读了很多可以帮助我解决这个问题的帖子。

这就是这种错误的解决方法。 (只需要插入一行代码到androidmanifest.xml)

android:requestLegacyExternalStorage=”true”

但就我而言,该插入不起作用。 我现在正在开发一个带有本机反应的移动应用程序。 当我尝试将文件放在 firebase 存储上时出现问题。 当然,我将那行代码插入到我的 androidmanifest.xml 文件中。

<application
  android:name=”.MainApplication”
  android:label=”@string/app_name”
  android:icon=”@mipmap/ic_launcher”
  android:roundIcon=”@mipmap/ic_launcher_round”
  android:allowBackup=”false”
  android:theme=”@style/AppTheme”
  android:requestLegacyExternalStorage=”true”
>

这是构建脚本

buildscript {
ext {
    buildToolsVersion = “29.0.3”
    minSdkVersion = 21
    compileSdkVersion = 29
    targetSdkVersion = 29
    ndkVersion = “20.1.5948944”
    playServicesVersion = “17.0.0”
    androidMapsUtilsVersion = “2.2.3”
}
 …
}

这是上传脚本

// uploads file
const pngRef = storage().ref(avatar/upload.png);
console.log(“pngRef”, pngRef);
await pngRef.putFile(fileUri);
const url = await storage()
  .ref(avatar/upload.png)
  .getDownloadURL();
console.log(“url”, url);

但还是报错

open failed: EACCES (Permission denied)

然后我在我的 firebase 控制台上收到了警报。

Your project's Cloud Firestore database '(default)' has insecure rules

当然,为了我的发展,我允许读写。

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

ADD:这是 firestore 规则。奇怪的是这个项目已经 运行正常,突然出现错误

rules_version = '2';
  service cloud.firestore {
    match /databases/{database}/documents {
      match /{document=**} {
        allow read, write: if true;
      }
    }
   }

有什么解决办法吗?这是 firebase 错误吗? 如果有人帮助我,我会很高兴。

我还没有真正看到 Firebase 存储中的 rules_version 行,但这些默认规则在规则游乐场中有效,所以客户端一定有问题。

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

您可以尝试将您的代码包装在 try-catch 中吗?这可能有助于获取一些额外的调试详细信息,例如您尝试访问的路径。

try {
  const pngRef = storage().ref("avatar/upload.png");
  console.log(“pngRef”, pngRef);
  await pngRef.putFile(fileUri);
  const url = await storage()
    .ref("avatar/upload.png")
    .getDownloadURL();
console.log(“url”, url);
} catch (e) {
  console.log(e)
  // This should contain additional details
}

另外,请尝试像我上面那样在引号中添加引用路径。此外,(可能不是问题)但要确保代码在异步函数中。如果仍未修复,请在您的问题中添加来自控制台的其他详细信息。