我需要处理包含要上传到服务器的文件的multipart / form-data请求。如果客户端在完全上传文件之前断开连接,服务器应该保存部分上传的文件。
我正在使用Spring MVC Controller来处理这个问题:
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容器临时目录中看到数据。
我想知道我是否遗漏了什么。
答案 0 :(得分:1)
MultiPart上传和可恢复上传完全不同。 您希望如何使用此方法在客户端上恢复上传?
有几种方法可以解决这个问题,其中一种方法是使用HTML5 File API在客户端切片文件并逐片上传。上传完所有切片后,您可以在服务器上组装它们。
像resumable.js这样的图书馆拥有自己的#34;自定义协议&#34;通过HTTP跟踪上传进度,而其他人选择使用Content-Range requests to do this。
现在回答你的问题,AFAIK对Spring Framework中的内容范围上传不支持;但您可以使用其中一种解决方案在服务器端实现可恢复的上传。