spring - 为什么存储在 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
}
而当它不起作用时,处置的价值等于假。我怀疑我的程序只是忽略了文件的一部分,但我不知道为什么。
解决方案
推荐阅读
- matlab - 使用逆变换采样在matlab中生成均匀分布在空心球体上的K个无人机的位置
- influxdb - 如何在 InfluxDB 中永久合并两个测量值
- c++ - 为可变模板的每个参数调用模板函数
- java - UCAExc:::5.0.0-SNAPSHOT 用户缺少权限或找不到对象:语句 [UPDATE PersonSET address = 'null' WHERE name = 'null'] 中的 PERSONSET
- video - Safari 多次下载 MP4
- r - 从 R 中的 JSON 文件中拆分数据的巨大问题
- azure - 如何使用 CLI 创建具有 enpoint 类型 Azure Function 的事件订阅?
- python - 覆盆子:没有名为 flask_api 的模块
- python - to_sql() 缺少 1 个必需的位置参数:'con'
- linux - 已解决:使用 RSA 令牌通过主机到网络上的服务器的 Docker 容器隧道