【发布时间】:2021-11-15 10:38:42
【问题描述】:
我想通过 HTTP 从InputStream 上传一个文件,为此,我使用作为JDK11 一部分提供的新HttpClient。当我尝试在创建发布请求时设置Content-Length 时,我得到一个IllegalArgumentException 说restricted header name: "Content-Length",如果我尝试从InputStream 上传一个没有Content-Length 标头的文件,我会从internal server error我要上传文件的服务器。是否有任何选项可以在 Java 11 的请求中设置 Content-Length?
我用来创建HttpRequest的代码:
var postRequest = HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.ofInputStream(() -> inputStream))
.uri(new URI(url))
.header(HttpHeaders.CONTENT_LENGTH, Long.toString(inputStreamSupplier.getFileSize()))
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE)
.build();
注意:无法更新到 Java 12 以允许使用受限标头。
我也可以使用另一个库,只是想知道在从 Spring 切换到 RestTemplate 之前是否可以选择使用 JDK 中的类。 (是的,它已被弃用,作为替代品使用 spring boot 暂时不能使用)
【问题讨论】:
标签: httpclient java-11 java-http-client