Apache HttpPost Multiple Files загружает файлы с ошибкой сервера - отсутствует начальная граница нескольких частей - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь загрузить несколько файлов, используя библиотеку Apache Http.

   compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.6'

Так я загружаю файлы.

String url = "url";
File f1 = new File("file1");
File f2 = new File("file2");
HttpPost request = new HttpPost(url);
request.addHeader("Content-Type", "multipart/form-data");
request.addHeader("Authorization", "Basic abcd=");
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

FileBody fileBody1 = new FileBody(f1, ContentType.DEFAULT_TEXT);
FileBody fileBody2 = new FileBody(f2, ContentType.DEFAULT_TEXT);

multipartEntityBuilder.addPart("file_1_param", fileBody1);
multipartEntityBuilder.addPart("file_2_param", fileBody2);
HttpEntity httpEntity = multipartEntityBuilder.build();
request.setEntity(httpEntity);
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(request);

HttpEntity entity = response.getEntity();
if (entity == null) {
    return;
}

InputStream is = entity.getContent();
String textResponse = InputStreamUtils.readText(is);
System.out.println(textResponse);

Он печатает.

<code><pre>    Server Error

Причина:

java.lang.RuntimeException: javax.servlet.ServletException: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: Missing initial multi part boundary
at com.ca.devtest.acl.servlet.filters.RemoteAuthenticationFilter.doFilter(RemoteAuthenticationFilter.java:285)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
</code>

Это работает, если я загружаю только один файл!

Обратите внимание, это не дубликат. Эти ссылки показывают сообщения, которые касаются проблемы на стороне сервера. Эта проблема со стороны клиента.

Jetty выдает «Отсутствует содержимое для многокомпонентного запроса» в многочастном запросе

500 Внутренняя ошибка сервера Загрузка файла Android HttpPost

1 Ответ

0 голосов
/ 04 сентября 2018

Я нашел решение. Я хотел поделиться им с другими людьми, чтобы вы могли 1) научиться загружать файлы и 2) обратить внимание на заголовки HTTP.

Когда я добавляю FileBody к MultipartEntityBuilder, он автоматически устанавливает границу. Я просто удалил эту строку из кода

 request.addHeader("Content-Type", "multipart/form-data"); //Remove it

Пример запроса POST с одним или несколькими вложенными файлами

Тип содержимого Multipart

...