Ошибка загрузки нескольких файлов Apache HttpPost из-за ошибки сервера — отсутствует начальная граница из нескольких частей

Я пытаюсь загрузить несколько файлов, используя библиотеку 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);

Он печатает.

<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>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)

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

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

Jetty выдает отсутствующий контент для составного запроса в составной форме запрос

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


person Yan Khonski    schedule 04.09.2018    source источник


Ответы (2)


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

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

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

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

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

person Yan Khonski    schedule 04.09.2018

Полностью удалите параметр content-type из заголовков, чтобы он работал.

Пример

headers = {
  'cache-control': 'no-cache',
  'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
  'postman-token': '26ef68f6-e579-a029-aec2-09b291678b4d',
  'storeid': '4223556'
}
person Madhavi Puliraju    schedule 29.10.2020