[英]Unable to upload media file toFirebase emulator
使用 Firebase 工具11.21.0
和FIREBASE_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.