fix #6134 by considering the type List<File> (#11361)

The method buildRequestBodyMultipart in ApiClient.java now recognizes if
an input parameter is an instance of List.
This commit is contained in:
Lennart Schwahn
2022-02-15 03:35:46 +01:00
committed by GitHub
parent 7555018aa6
commit ba04720898
5 changed files with 95 additions and 15 deletions

View File

@@ -1395,9 +1395,12 @@ public class ApiClient {
for (Entry<String, Object> param : formParams.entrySet()) {
if (param.getValue() instanceof File) {
File file = (File) param.getValue();
Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + param.getKey() + "\"; filename=\"" + file.getName() + "\"");
MediaType mediaType = MediaType.parse(guessContentTypeFromFile(file));
mpBuilder.addPart(partHeaders, RequestBody.create(file, mediaType));
addPartToMultiPartBuilder(mpBuilder, param.getKey(), file);
} else if (param.getValue() instanceof List) {
List<File> files = (List<File>) param.getValue();
for (File file : files) {
addPartToMultiPartBuilder(mpBuilder, param.getKey(), file);
}
} else {
Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + param.getKey() + "\"");
mpBuilder.addPart(partHeaders, RequestBody.create(parameterToString(param.getValue()), null));
@@ -1421,6 +1424,19 @@ public class ApiClient {
}
}
/**
* Add a Content-Disposition Header for the given key and file to the MultipartBody Builder.
*
* @param mpBuilder MultipartBody.Builder
* @param key The key of the Header element
* @param file The file to add to the Header
*/
private void addPartToMultiPartBuilder(MultipartBody.Builder mpBuilder, String key, File file) {
Headers partHeaders = Headers.of("Content-Disposition", "form-data; name=\"" + key + "\"; filename=\"" + file.getName() + "\"");
MediaType mediaType = MediaType.parse(guessContentTypeFromFile(file));
mpBuilder.addPart(partHeaders, RequestBody.create(file, mediaType));
}
/**
* Get network interceptor to add it to the httpClient to track download progress for
* async requests.