首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >等待订阅方法将所有数据输入数组

等待订阅方法将所有数据输入数组
EN

Stack Overflow用户
提问于 2022-03-11 19:22:35
回答 1查看 147关注 0票数 -1

我有一个端点,它的目的是接收一个csv文件,对它的名称做一些更改,然后将它发送到一个方法,将它包含在一个文件中的所有数据以纯文本形式上传到Google。

该文件可能有超过10万条记录,所以在解析它时,我必须将所有数据保存在一个变量中,然后将其保存在Google中。今天我可以这样做,但是我总是覆盖同一个文件,因为我不知道如何在方法中指示等待订阅的完整进程,然后再上传文件,所以每次数据被添加到数组时,文件都会再次上传。

虽然该方法符合这一思想,但我想提高这个性能,因为上传一个只有2MB的文件和10万条记录大约需要15分钟。有什么想法吗?

代码语言:javascript
运行
复制
private Storage storage;

private void uploadToGoogleCloudStorage(FilePart filePart, BlobInfo blobInfo) throws IOException {
    try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
        filePart.content()
                .subscribe(dataBuffer -> {
                    byte[] bytes = new byte[dataBuffer.readableByteCount()];
                    dataBuffer.read(bytes);
                    DataBufferUtils.release(dataBuffer);
                    try {
                        bos.write(bytes);
                        storage.createFrom(blobInfo, new ByteArrayInputStream(bos.toByteArray()));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-16 13:06:50

我终于找到解决办法了。我将订阅更改为map,然后从通量中获得最后一个响应,然后订阅响应,使用存储接口将数据上传到google云存储(使用他们的api的包来自google )

代码语言:javascript
运行
复制
private Storage storage;

private void uploadToGoogleCloudStorage(FilePart filePart, BlobInfo blobInfo) throws IOException {
    try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
        filePart.content()
                .map(dataBuffer -> {
                    byte[] bytes = new byte[dataBuffer.readableByteCount()];
                    dataBuffer.read(bytes);
                    DataBufferUtils.release(dataBuffer);
                    try {
                        bos.write(bytes);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return bos;
                }).last().subscribe(data -> {
                    try {
                        storage.createFrom(blobInfo, new ByteArrayInputStream(bos.toByteArray()));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71443676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档