簡體   English   中英

無法將媒體文件上傳到 Firebase 模擬器

[英]Unable to upload media file toFirebase emulator

使用 Firebase 工具11.21.0FIREBASE_STORAGE_EMULATOR_HOST=localhost:9199和 maven 依賴

<dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
      <version>2.17.1</version>
</dependency>

我啟動了 firebase 模擬器。 並嘗試了一個簡單的文件存儲:

emulatorStorage = StorageOptions.newBuilder()
                    .setProjectId(projectId)
                    .setHost("http://localhost:9199")
                    .setCredentials(NoCredentials.getInstance())   
                    .build()
                    .getService();

並試圖保存一個文件:

 byte[] compress = "test".getBytes();
           
            Blob blob = emulatorStorage.create(
                    BlobInfo.newBuilder(index, filename)
                            .setContentType("text/plain")
                            .build()
                    ,compress,
                    Storage.BlobTargetOption.doesNotExist());

但即使設置了內容類型,我每次都會得到這個:

com.google.cloud.storage.StorageException: Failed to parse multipart request body part. Missing content type.
    at com.google.cloud.storage.StorageException.translate(StorageException.java:163)
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.translate(HttpStorageRpc.java:297)
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.create(HttpStorageRpc.java:379)
    at com.google.cloud.storage.StorageImpl.lambda$internalCreate$2(StorageImpl.java:208)
    at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:103)
    at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
    at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
    at com.google.cloud.storage.Retrying.run(Retrying.java:60)
    at com.google.cloud.storage.StorageImpl.run(StorageImpl.java:1476)
    at com.google.cloud.storage.StorageImpl.internalCreate(StorageImpl.java:205)
    at com.google.cloud.storage.StorageImpl.create(StorageImpl.java:151)

通過調試我知道它正在與本地模擬器對話:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
POST http://localhost:9199/upload/storage/v1/b/demo-project.appspot.com/o?ifGenerationMatch=0&projection=full&uploadType=multipart
{
  "code" : 400,
  "message" : "Failed to parse multipart request body part. Missing content type."
}

我在保存操作中遺漏了什么,內容類型是否錯誤? 或者這可能是模擬器中的錯誤或與雲存儲庫的兼容性問題?

正如@Gridcell Coder 所提到的,Firebase 模擬器的雲存儲僅支持雲 API 的一個非常小的子集,它只能通過 firebase firebase-admin package 使用。Firebase 的雲存儲尚不支持Admin SDK。

我發現了您提出的github 問題,並按照 firebase v11.21.0 和 v11.19.0 的步驟進行操作,但我可以使用firebase emulators:start --project demo-project --debug成功上傳視頻文件。

根據我們上面評論中的對話,您似乎將firebase-tools-linux誤認為是命令。 您為linux設置前台所遵循的文檔將只有可下載的文件名為 firebase firebase-tools-linux這只是文件名並不意味着對於 linux 我們必須使用 firebase firebase-tools-linux作為 linux 機器的命令.如果您觀察共享文檔中的第 3 步,它指向登錄並測試我們必須僅使用firebase login的 CLI。 因此嘗試使用firebase emulators:start --project demo-project --debug命令。

我采取的步驟

第 1 步:從您共享的github克隆源代碼。 將目錄更改為firebase-emulator-debug

第 2 步:運行以下命令

`firebase emulators:start --project demo-project --debug`.

第 3 步:從模擬器成功上傳 2.3 MB 的視頻文件。

僅供參考,我也僅在上述步驟中使用了 linux 機器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM