Проект, над которым я работаю, должен поддерживать загрузку больших файлов и знать время, затраченное на их загрузку.
Для обработки больших файлов я использую потоковый API Apache FileUpload, это также позволяет мне измерить время, необходимое для сохранения всего потока.
Проблема, с которой я столкнулся, заключается в том, что я не могу использовать MockMvc в интеграционном тесте на этом контроллере. Я знаю, что контроллер работает, поскольку я успешно загрузил файлы с помощью почтальона.
Упрощенный код контроллера:
@PostMapping("/upload")
public String handleUpload(HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterStream = upload.getItemIterator(request);
while (iterStream.hasNext()) {
FileItemStream item = iterStream.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (!item.isFormField()) {
// Process the InputStream
} else {
String formFieldValue = Streams.asString(stream);
}
}
}
Упрощенный код теста:
private fun uploadFile(tfr: TestFileContainer) {
val mockFile = MockMultipartFile("file", tfr.getData()) // .getData*() returns a ByteArray
val receiveFileRequest = MockMvcRequestBuilders.multipart("/upload")
.file(mockFile)
.contentType(MediaType.MULTIPART_FORM_DATA)
val result = mockMvc.perform(receiveFileRequest)
.andExpect(status().isCreated)
.andExpect(header().exists(LOCATION))
.andReturn(
}
Это ошибка, которую я сейчас получаю
org.apache.tomcat.util.http.fileupload.FileUploadException:
запрос был отклонен, так как не было найдено многочастной границы
Может кто-нибудь помочь?