我正在从事的项目需要支持大文件上传,并且需要知道在上传过程中花费的时间。
要处理我正在使用Apache FileUpload的流API的大文件,这还使我能够测量保存完整流所需的时间。
我遇到的问题是,我似乎无法在此控制器的集成测试中使用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: 该请求被拒绝,因为未找到多部分边界
有人可以帮忙吗?
答案 0 :(得分:0)
MockMultipartFile
方法无效,因为Spring确实在幕后工作,只是将文件传递给周围。
最终使用RestTemplate
代替,因为它实际上是在构造请求。