无法将媒体文件上载到Firebase模拟器

8ulbf1ek  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(112)

使用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."
}

我在保存操作中遗漏了什么,是内容类型错误吗?或者这可能是模拟器中的错误或与云存储库的兼容性问题?

lvmkulzt

lvmkulzt1#

我已经找到了你提出的github issue,并按照步骤从那里与firebase v11.21.0和v11.19.0,但我可以成功地上传视频文件使用firebase emulators:start --project demo-project --debug
根据我们在评论中的对话,看起来你把firebase-tools-linux误认为是一个命令。你在linux下设置forebase的文档中只会有一个可下载的文件名firebase-tools-linux。这只是一个文件名,并不意味着对于linux,我们必须使用firebase-tools-linux作为linux机器的命令。如果你观察到了你分享的文档中的第三步,它指向登录并测试CLI,而我们只能使用firebase login。因此,请尝试使用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机器。

km0tfn4u

km0tfn4u2#

正如@Gridcell Coder提到的,Cloud Storage for Firebase模拟器只支持Cloud API的一个非常小的子集,并且只能通过firebase-admin包使用。Admin SDK还不支持Cloud Storage for Firebase。

相关问题