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

发送接收到的spring文件部件而不保存

易书
2023-03-14
private static String UPLOAD_ROOT = "C:\\pics\\";

public Mono<Void> checkInTest(@RequestPart("photo") Flux<FilePart> photoParts,
                              @RequestPart("data") CheckInParams params, Principal principal) {
    return saveFileToDisk(photoParts);
}

private Mono<Void> saveFileToDisk(Flux<FilePart> parts) {
    return parts
            .log("createImage-files")
            .flatMap(file -> {
                Mono<Void> copyFile = Mono.just(Paths.get(UPLOAD_ROOT, file.filename()).toFile())
                        .log("createImage-picktarget")
                        .map(destFile -> {
                            try {
                                destFile.createNewFile();
                                return destFile;
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            }
                        })
                        .log("createImage-newfile")
                        .flatMap(file::transferTo)
                        .log("createImage-copy");

                return Mono.when(copyFile)
                        .log("createImage-when");
            })
            .log("createImage-flatMap")
            .then()
            .log("createImage-done");
}
.map(destFile -> {
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        try {
            map.set("multipartFile", new ByteArrayResource(FileUtils.readFileToByteArray(destFile)));
        } catch (IOException ignored) {
        }
        map.set("fileName", "test.txt");
        WebClient client = WebClient.builder().baseUrl("http://localhost:8080").build();

        return client.post()
                .uri("/upload")
                .contentType(MediaType.MULTIPART_FORM_DATA)
                .syncBody(map)
                .exchange(); //todo handle errors???
    }).then()

共有1个答案

丁高峯
2023-03-14

我将提到@Abhinaba Chakraborty
在https://stackoverflow.com/A/62745370/4551411中提供的解决方案

大概是这样的:

  @PostMapping(value = "/images/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  public Mono<ResponseEntity<Void>> uploadImages(@RequestPart("files") Flux<FilePart> fileParts) {
    return fileParts
        .flatMap(filePart -> {
          return webClient.post()
              .uri("/someOtherService")
              .body(BodyInserters.fromPublisher(filePart.content(), DataBuffer.class))
              .exchange()
              .flatMap(clientResponse -> {
                //some logging
                return Mono.empty();
              });
        })
        .collectList()
        .flatMap(response -> Mono.just(ResponseEntity.accepted().build()));
  }

这接受多部分表单数据,您可以附加多个图像文件并将它们上传到另一个服务。

 类似资料:
  • 我是Spring框架的新手,事实上,我正在学习和使用Spring Boot。最近,在我正在开发的应用程序中,我让Quartz调度器工作,现在我想让Spring集成在那里工作:FTP连接到服务器以从中写入和读取文件。 我想要的其实很简单(正如我在以前的java应用程序中所做的那样)。我计划每天在不同的时间启动两个Quartz作业:其中一个从FTP服务器读取文件,另一个将文件写入FTP服务器。 我将详

  • http://Socket.io允许你触发或响应自定义的事件,除了connect,message,disconnect这些事件的名字不能使用之外,你可以触发任何自定义的事件名称。 服务器端 // 注意,io(<端口号>) 将为你创建一个http服务。 var io = require('socket.io')(80); io.on('connection', function (socket)

  • 本文向大家介绍php发送与接收流文件的方法,包括了php发送与接收流文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php发送与接收流文件的方法。分享给大家供大家参考。具体如下: sendStreamFile.php 把文件以流的形式发送 receiveStreamFile.php 接收流文件并保存到本地 sendStreamFile.php文件: receiveStreamFi

  • 问题内容: 我正在尝试开发一个非常简单的客户端/服务器,其中客户端将文件转换为字节,将其发送到服务器,然后将字节转换回文件。 当前,程序仅创建一个空文件。我不是一个出色的Java开发人员,因此不胜感激。 这是接收客户端发送的内容的服务器部分。 这是客户端部分 问题答案: 在Java中复制流的正确方法如下: 希望我每次在论坛上发布时都能获得一美元。

  • 我正在用Gradle构建一个演示Spring Boot应用程序,并使用Heroku托管该应用程序。我已经预装了Gradle4.8,所以我没有在项目目录中保留文件,并且应用程序在本地上运行良好,但是当我使用。以下日志显示警告: 并且生成在显示Gradle版本错误后失败: 意味着它使用默认的文件和安装2.0来部署应用程序。 现在我的问题是,如何强制Heroku部署进程使用预装的Gradle版本,而不在

  • 问题内容: 在我的CRM在线系统中,我使用IMAP协议控制传入的邮件。现在,我正在使用phpmailer和SMTP协议发送邮件。一切都很好,但我有一件奇怪的事情。如何使用phpmailer脚本发送的邮件转到“已发送” IMAP文件夹? 问题答案: PHPMailer中现在有一个方法getSentMIMEMessage返回整个MIME字符串