【问题标题】:Spring MVC handling partial file uploadSpring MVC 处理部分文件上传
【发布时间】: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


    【解决方案1】:

    多部分上传和可恢复上传是完全不同的。 您希望如何使用此方法在客户端恢复上传?

    有几种方法可以解决这个问题,其中一种是使用HTML5 File API在客户端对文件进行切片并逐片上传。上传所有切片后,您可以在服务器上组装它们。

    resumable.js 这样的库有自己的通过 HTTP 的“自定义协议”来跟踪上传进度,而其他库则选择使用 Content-Range requests to do this

    现在回答你的问题,AFAIK 不支持 Spring Framework 中的 Content-Range 上传,你知道吗;但您可以使用其中一种解决方案在服务器端实现可恢复上传。

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2014-10-31
      • 2017-11-05
      • 2015-01-13
      相关资源
      最近更新 更多