Skip to content

Firebase Storage Emulator: The given file does not have any download URLs #3451

@vajahath

Description

@vajahath

Firebase says Firebase Storage: The given file does not have any download URLs when attempting to download.

Environment info

firebase-tools: 9.12.1
Platform: Windows

Test case

add-content.mjs

// use emulator
process.env.GCLOUD_PROJECT = "test-project";
process.env.FIREBASE_STORAGE_EMULATOR_HOST = "localhost:9199";

import admin from "firebase-admin";
admin.initializeApp({
  storageBucket: "default-bucket",
});
const storage = admin.storage().bucket();

const file = storage.file("app-data/test.json");

file
  .save(JSON.stringify({ stuffs: "stuffs" }))
  .then(() => console.log("wrote"))
  .catch((err) => console.error(err));  

read-content.html

<!DOCTYPE html>
<html>
  <head>
    <title>See</title>
  </head>
  <body>
    <script src="https://www.gstatic.com/firebasejs/8.6.4/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.6.4/firebase-storage.js"></script>
    <script>
      firebase.initializeApp({
        storageBucket: "default-bucket",
      });
      const storage = firebase.storage();
      storage.useEmulator("localhost", 9199);
      const contentRef = storage.ref("app-data/test.json");
      contentRef
        .getDownloadURL()
        .then((url) => console.log({ url }))
        .catch((err) => console.error(err));
    </script>
  </body>
</html>

Steps to reproduce

  • start storage emulator
  • run node add-content.mjs: you should see the message wrote
  • open read-content.html in chrome and check console: you should see the error message "Firebase Storage: The given file does not have any download URLs"
  • go to the emulator ui to check if the added file is there. (it is there. but you are unable to access it)

Expected behavior

You should be able to access it.

Actual behavior

Receiving error

Firebase Storage: The given file does not have any download URLs

My intuition may be incorrect but this randomly came to my mind: May be when I save the content, emulator is not creating a default access token. The reason behind this thought is when I go to the emulator and hit the "create new access token" button for this file, emulator creates a new access token. Then everything works as fine. The read-content.html file runs correctly.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions