2

我必须实现一个 Vertx POST 请求。通过 Postman 完成请求,如下图所示:

在此处输入图像描述

棘手的部分是服务器需要正文的密钥“upgrade_file”。我不知道如何用 Vertx 做到这一点。这是我到目前为止所拥有的:

Buffer bodyBuffer = Buffer.buffer(body); // body is byte[]
HttpClientRequest request = ...
request.handler( response -> ...
request.end(bodyBuffer);

如何将“upgrade_file”设置为正文的键?

4

2 回答 2

0

如果要发送文件,最简单的方法是使用Vertx WebClientsendMultipartForm的方法。

先创建一个Multipartform

MultipartForm form = MultipartForm.create()
  .attribute("imageDescription", "a very nice image")
  .binaryFileUpload(
    "imageFile",
    "image.jpg",
    "/path/to/image",
    "image/jpeg");

然后调用WebClient.sendMultipartForm(form)以发送请求。

通用 Vertx HttpClient 是一个低级 API,您应该将表单数据序列化为字符串或缓冲区,格式类似于Vertx GraphQL 测试代码中的示例文件。然后将缓冲区发送到服务器端。

于 2021-06-27T04:44:50.703 回答
0

使用 WebClient 而不是 HTTP 客户端,它为提交表单提供了专门的支持。

WebClient client = WebClient.create(vertx);

或者如果您已经创建了一个 http 客户端:

WebClient client = WebClient.wrap(httpClient);

然后将表单数据创建为地图并使用正确的内容类型发送表单

MultiMap form = MultiMap.caseInsensitiveMultiMap();
form.set("upgrade_file", "...");

// Submit the form as a multipart form body
client.post(8080, "yourhost", "/some_address")
      .putHeader("content-type", "multipart/form-data")
      .sendForm(form, ar -> {
        //do something with the response
      });

更多示例参见https://vertx.io/docs/vertx-web-client/java/

于 2018-04-13T12:32:40.487 回答