首页 > 解决方案 > 为什么存储在 Firebase 存储中的某些文件是 0 字节?

问题描述

我正在使用 Spring Webflux 将新 blob 上传到我的 Firebase 存储,但它仅适用于小型文件。当我尝试上传大于几百千字节的内容时,有时会创建空文件(有时它可以正常工作)。我注意到重新启动我的应用程序后,我只能上传一个大文件,然后只能上传小文件,如果我先尝试上传小文件,则无法上传任何大文件。这是我的上传逻辑的代码:

public Mono<?> uploadFile(String name, Mono<FilePart> file, FileType type) {
        Storage storage = options.getService();
        BlobId blobId = BlobId.of(bucketName, type.getDirectory() + "/" + name);
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("video/mp4").build();
        WriteChannel channel = storage.writer(blobInfo);

        return file
                .map(Part::content)
                .map(flux -> flux.subscribe(part -> {
                    try {
                        channel.write(part.asByteBuffer());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                })).doAfterTerminate(() -> {
                    try {
                        channel.close();
                        logger.info("Write channel closed: " + !channel.isOpen());

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }

和控制器:

@PostMapping(value = "/videos/upload/{name}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<?> uploadVideo(@PathVariable String name, @RequestPart("file") Mono<FilePart> file) {
    return firebaseStorageService.uploadFile(name, file, FileType.VIDEO);
}

我使用 Insomnia 将文件作为表单参数发送请求,并获取 Disposable 对象作为响应。当它起作用时,响应如下所示:

{
  "disposed": true,
  "scanAvailable": true
}

而当它不起作用时,处置的价值等于假。我怀疑我的程序只是忽略了文件的一部分,但我不知道为什么。

标签: springfirebase-storagespring-webflux

解决方案


推荐阅读