Я замечаю, что когда я получаю файлы в своем приложении Java, используя следующие библиотеки:
compile group: 'org.apache.httpcomponents', name: 'httpcore-nio', version: '4.4.5'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.5'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'
compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.2'
Я заметил, что в верхней части файла будут различные заголовки, такие как этот
--dVb9w156wIo3LdB-AjdoAEyD0yNsn9
Content-Disposition: form-data; name="file"; filename="SendFile.html"
Content-Type: application/octet-stream
<!doctype html> <!-- now the actual file begins -->
Я отправляю с помощью этого конструктора
HttpEntity requestEntity = MultipartEntityBuilder.create().setLaxMode()
.setContentType(ContentType.TEXT_HTML).addBinaryBody("file", out).build();
Таким образом, заголовки должны быть в laxMode()
, который является HttpMultipartMode.BROWSER_COMPATIBLE
, и это действительно удаляет некоторые заголовки из самого файла, но Content-Disposition
и Content-Type
все еще задерживаются.
Как мне убедиться, что я записываю тело файла только тогда, когда (на стороне клиента) я его записываю:
try (OutputStream os = new FileOutputStream(tmp)) {
e.writeTo(os);
}
Некоторые примечания:
- Сервер и клиент являются приложениями Apache HTTP Java.
- Я считаю, что проблема в принимающей стороне. Мой клиент NodeJS Express, кажется, удаляет эти заголовки, когда я отправляю файлы этому клиенту NodeJS.
- Я действительно предпочел бы не удалять заголовки вручную, должен быть способ указать Apache только
.writeTo()
тело, а не все это.