我正在将 POST 调用发送到文件名中包含西里尔字符的文件的端点。我已经尝试在我知道的每个地方将编码设置为 UTF-8。
RestAssured.config = RestAssured.config()
.encoderConfig(encoderConfig().defaultContentCharset("UTF-8"))
.encoderConfig(encoderConfig().defaultCharsetForContentType("UTF-8", "multipart/form-data"))
.multiPartConfig(multiPartConfig().defaultCharset("UTF-8"))
.decoderConfig(decoderConfig().defaultContentCharset("UTF-8"))
.decoderConfig(decoderConfig().defaultCharsetForContentType("UTF-8", "multipart/form-data"));
RequestSpecification rs = given()
.baseUri(baseUrl)
.header("Content-Type", "multipart/form-data")
.header(getAuthHeader())
.config(RestAssured.config)
.multiPart(
new MultiPartSpecBuilder(file)
.controlName("file")
.mimeType("audio/mpeg")
.fileName(file.getName())
.charset("UTF-8")
.build()
)
.multiPart(
new MultiPartSpecBuilder(categoryId)
.controlName("categoryId")
.build()
)
.multiPart(
new MultiPartSpecBuilder(fileTitle)
.charset(Charsets.UTF_8)
.controlName("fileTitle")
.build()
)
.log().everything();
rs
.when()
.post(FilePaths.add.value)
.then()
.log().everything()
.statusCode(201)
.contentType(ContentType.JSON);
当我调试 API 代码时,我可以看到在上面的情况下,内容处置 header 带有用问号替换的西里尔字符: form-data;名称="file";文件名=“??????.mp3”
。
当我与 Postman 进行相同的调用时,它工作得很好。我发现放心调用和 Postman 调用之间的唯一区别是内容处置 header 。
知道需要调整哪些内容才能获得放心的配置吗?
最佳答案
我通过查看记录的放心问题找到了答案 here .
我只需确保我没有使用 STRICT 模式(这是默认模式):
.config(RestAssuredConfig.config().httpClient(HttpClientConfig.httpClientConfig().httpMultipartMode(HttpMultipartMode.BROWSER_COMPATIBLE))
关于java - 使用文件名中包含西里尔字符的多部分文件进行放心的 POST 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59780811/