【发布时间】:2015-05-20 17:21:16
【问题描述】:
我需要处理包含要上传到服务器的文件的 multipart/form-data 请求。如果客户端在完全上传文件之前断开连接,服务器应该保存部分上传的文件。
我正在使用 Spring MVC 控制器来处理这个问题:
public class FileUploadController {
@RequestMapping("/upload")
public String handleUploadRequest(MultipartHttpServletRequest request) {
MultipartFile file = request.getFile("File");
InputStream stream = file.getInputStream();
// read data from stream
}
}
已扩展 CommonsMultiPartResover 以覆盖
public class FileUploadMultipartResolver extends CommonsMultipartResolver {
@Autowired
ServletContext servletContext;
@Override
public void cleanupMultipart(MultipartHttpServletRequest request) {
File tempDir = (File) servletContext.getAttribute(ServletContext.TEMPDIR);
File[] files = tempDir.listFiles();
for(int i=0; i< files.length; i++) {
LOGGER.debug("filename: " + files[i].getName() + ", size: " + files[i].length());
}
} }
多部分属性设置为惰性解析,最大内存大小:
@Configuration
public class RcseFtcsConfiguration {
@Bean(name="multipartResolver")
public MultipartResolver getMultipartResolver() throws IOException {
FileUploadMultipartResolver resolver = new FileUploadMultipartResolver();
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(1024);
return resolver;
} }
但是,当客户端在完全上传之前终止时,我无法获取部分上传的文件。
我认为 MultiPartResolver 应该为每个 MaxInMemorySize 字节将字节写入 servlet 容器临时目录,但它没有发生。只有当完整的请求数据到达服务器时,我才能看到 servlet 容器临时目录中的数据。
我想知道我是否遗漏了什么。
【问题讨论】:
标签: spring spring-mvc multipartform-data