当前位置: 首页 > 知识库问答 >
问题:

网络流量上传文件未保存

空慈
2023-03-14

我有这段代码:

@PostMapping(value = {"/store"})
public Mono<ResponseEntity<StoreResponse>> store(@RequestPart("file") Mono<FilePart> file,
                                                 @RequestPart("publicationId") String publicationId,
                                                 @RequestPart("visible") String visible) throws Exception {
    return file
            .doOnNext(this::checkFile)
            .flatMap((f) -> this.saveFileToDatabase(UUID.fromString(publicationId),
                    f.filename(),
                    Boolean.parseBoolean(visible)))
            .then(Mono.just(ResponseEntity.ok().body(new StoreResponse("", "", "Working",
                    null))))
            .onErrorReturn(ResponseEntity.internalServerError().body(new StoreResponse("Not Working",
                    "", "Working", null)));
}

问题1:
奇怪的是,只要我在Mono上使用平面地图,它就可以工作。
当我切换到map而不是平面地图时,它就不起作用(该文件不会写入数据库this.saveFileToDatabase(通过spring-data-r2dbc))。
为什么会这样?

问题2:
当我想在保存到数据库后执行另一个操作(将文件保存到minio容器)时,如何将其链接到给定的代码中?另一个然后()

共有1个答案

壤驷高旻
2023-03-14

当我切换到map而不是flatMap时,它就不起作用了

map操作符被设计为执行1对1的同步操作,比如简单的对象映射。另一方面,flatMap用于异步I/O操作,就像您的情况一样。参见Reactor中的地图与平面地图

当我想在保存到数据库后进行另一个操作时

您可以使用第二个flatmap,如下所示:

 .flatMap(file -> this.saveFileToDatabase(...).map(reponse -> file))
 .flatMap(file -> this.saveFileToContainer(...))
 类似资料:
  • 我目前正在使用自定义JWT身份验证进行SpringCloudGateway。身份验证后,我希望使用GlobalFilter将标头中的JWT令牌字符串传递到下游服务: JWT令牌字符串可以通过调用主体来获得。getName(); 我的问题是:我如何实现

  • 问题内容: 我可以在Java监视程序上创建网络流量吗?该程序必须控制从计算机程序(包括OS模块)到网络驱动程序再返回的所有网络流量。如果是,如何? 注意: 我不仅要监视流量,还要对其进行控制。我想在Windows NT上实现这样的系统。仅靠Java无法实现它。如何在JNI的帮助下执行它? 也许是另一个变体。我不熟悉Windows服务,但仍然如此。我将在C 上编写一个程序并将其注册为Windows服

  • 问题 上传文件,并将其保存到预先设定的某个目录下。 方法 import web urls = ('/upload', 'Upload') class Upload: def GET(self): web.header("Content-Type","text/html; charset=utf-8") return """<html><head></he

  • 我有一个问题,上传文件到网络系统使用硒驱动程序。所以在我的页面上,我没有任何输入来设置文件路径,而且我在网络上找到的大多数解决方案都不适合我。我必须点击上传文件按钮,然后在窗口对话框中设置文件的路径。我找到了winforms SendKeys类中使用的方法: 它的工作,但只有当测试有完全控制的机器(如果没有-路径已发送到某处不对话)。这就是问题所在,因为我无法完全控制运行测试的机器。你知道不使用S

  • 问题内容: 我们正在将Selenium与Java API和一些Javascript用户扩展一起使用。我们在应用程序中使用了很多AJAX调用。我们的许多测试都是随机失败的,因为有时AJAX调用的完成速度比其他时间慢,因此页面未完全加载。我们通过等待特定元素或Thread.sleep来解决此问题。我试图找到一种方法来代替等待网络流量完成。这样我们就可以做到这一点: 这样,我们可以摆脱线程hiberna

  • 问题内容: 我们正在将Selenium与Java API和一些Javascript用户扩展一起使用。我们在应用程序中使用了很多AJAX调用。我们的许多测试都是随机失败的,因为有时AJAX调用的完成速度比其他时间慢,因此页面未完全加载。我们通过等待特定元素或Thread.sleep来解决此问题。我试图找到一种方法来代替等待网络流量完成。这样我们就可以做到这一点: 这样,我们可以摆脱线程休眠,并在服务