当前位置: 首页 > 知识库问答 >
问题:

.tmp文件在多部分Spring MVC文件上传中未被删除

凌嘉志
2023-03-14

我已经实现了一个Spring MVC REST服务,它接受一个包含文件上传和JSON主体的多部分消息。以下是所涉及的主要类:

    @RestController
    public class MyController {

    @Autowired
    private MyService myService;

    @RequestMapping(value = "/publish", method = RequestMethod.POST,
            consumes = "multipart/form-data", produces = "application/json")
    public PublishContentResponse publishContent(@RequestPart("json") PublishContentRequest request, @RequestPart("file") MultipartFile file) throws IOException {
        PublishContentResponse response = myService.publishContent(request, file);
        return response;
    }
}
    public class MyServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{MyConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/mypath/*"};
    }

    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(getMultipartConfigElement());
    }

    private MultipartConfigElement getMultipartConfigElement() {
        loadServletProperties();
        MultipartConfigElement multipartConfigElement = new MultipartConfigElement("c:/temp/", 5242880, 20971520, 0);
        return multipartConfigElement;
    }
}
@Configuration
@ComponentScan
@EnableWebMvc
public class MyConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public MultipartResolver multipartResolver() {
        return new StandardServletMultipartResolver();
    }

  }

我的问题是servlet初始化器(c:/temp/)中定义的临时位置包含。tmp文件夹,这些文件夹是在每次对该服务的请求之后创建的,并且从未被删除。在记事本中打开它们,看起来它们只包含请求中发送的JSON的纯文本副本,而不包含上传文件的字节。我一辈子都想不出如何让这些文件在处理后消失。目前,我只能在每次调用后使用fileutils.cleanDirectory(“c/:temp/”),但我对这个解决方案一点也不满意。有人知道我可以做什么来删除这些。tmp文件吗?

共有1个答案

狄阳秋
2023-03-14

我最终发现,无论出于什么原因,JVM都不会垃圾收集这些文件,所以。tmp文件可以永远保存下来。尽管解决方案非常不令人满意,但我还是通过强烈建议JVM在文件上传结束时进行垃圾收集来解决这个问题

System.gc();

这将是很好的,仍然找到一个理由,为什么它不收集垃圾在第一位,但我现在放弃了这个!

 类似资料:
  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的:

  • 我试图创建一个页面,用户可以张贴图像及其细节。现在,当我测试来自postman的spring boot服务时,我能够成功地在服务中获取文件。当我试图从angular5中做同样的事情时,多部分文件在服务中没有被识别,并且总是得到空数组。 我的角服务代码如下 } 我已经尝试添加标头,如multipart/form-data,并将其设置为un定义。无论哪种方式,我都收到了错误。在发布到这里之前,我已经广

  • 问题内容: 我想从当前目录中的所有文件名中删除 test.extra 但是它抱怨没有找到file.echo是为了确保它正确列出。 问题答案: 首先使用“ sed -e”代替“ \ e” 我建议您用bash这样做

  • 我正在尝试使用@Controller和@Request estMap使用Spring 3.1.2上传多个文件。 下面是我做的和我的配置。 格式 : 控制器方法: 我的会议: 提交表单确实会转到添加文件系统映像方法。locId 参数的数据位于此处,但“文件”参数未绑定。无论我尝试过什么参数/字段名称/参数类型的组合,它都是系统性的空值。 HttpServletRequest参数是一个org.spri

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 本文向大家介绍SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例,包括了SpringMVC 文件上传配置,多文件上传,使用的MultipartFile的实例的使用技巧和注意事项,需要的朋友参考一下 基本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤 文件上传项目的