gpt4 book ai didi

java - MultiPartFile 删除得太早

转载 作者:行者123 更新时间:2023-12-02 10:44:01 44 4
gpt4 key购买 nike

我正在使用 MultPartFile 从前端上传 .zip,有时在我对其执行任何操作之前,该文件会被删除。我调试 CommonsMultipartFile.class (intellij) 来清理我的想法,但我找不到任何东西可以解释为什么有时我可以操作 MultPartFile,有时却不能。

在 CommonsMultipartFile.class 中,当他传递 isAvailable() 方法时,File 被删除,当 isAvailable() 尝试验证他是否存在时,返回 false。

这是我的代码

 private void limparDiretorioCargasVXESalvarCarga(MultipartFile arquivoMultipartFile, String caminhoDiretorio, String nomeArquivo) throws Step1Exception {
try {
File diretorio = new File(caminhoDiretorio);

if (!diretorio.exists()) {
diretorio.mkdirs();
} else {
FileUtils.cleanDirectory(diretorio);
}
System.out.println("Diretorio: " + diretorio.getPath());
File file = new File(diretorio.getPath(), nomeArquivo);

InputStream InputStreamArquivoFile = arquivoMultipartFile.getInputStream();
File arquivoFileTemp = new File("/var/lib/mysql-files/cargasvx/baixados/"+arquivoMultipartFile.getOriginalFilename());

OutputStream outputStream = new FileOutputStream(arquivoFileTemp);
IOUtils.copy(InputStreamArquivoFile, outputStream);
outputStream.close();

this.copiarArquivo(arquivoFileTemp,file);

} catch (Exception e) {
e.printStackTrace();
}
}

传入时:

        InputStream InputStreamArquivoFile = arquivoMultipartFile.getInputStream();

该异常是可抛出的。

这是堆栈:

java.lang.IllegalStateException: File has been moved - cannot be read again
at org.springframework.web.multipart.commons.CommonsMultipartFile.getInputStream(CommonsMultipartFile.java:146)
at br.com.sgsistemas.integrador.services.integracao.ImportacaoService.limparDiretorioCargasVXESalvarCarga(ImportacaoService.java:284)
at br.com.sgsistemas.integrador.services.integracao.ImportacaoService.iniciarImportacaoArquivos(ImportacaoService.java:155)
at br.com.sgsistemas.integrador.services.integracao.ImportacaoService$$FastClassBySpringCGLIB$$422ad70a.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)
at br.com.sgsistemas.integrador.services.integracao.ImportacaoService$$EnhancerBySpringCGLIB$$540126c6.iniciarImportacaoArquivos(<generated>)
at br.com.sgsistemas.integrador.controllers.ImportacaoAPI.lambda$iniciarImportacaoCarga$0(ImportacaoAPI.java:52)
at java.lang.Thread.run(Thread.java:748)

我知道我可以setMaxInMemorySize(),但这不是我搜索的解决方案。我需要将文件保存在某个临时目录中,并在操作它后将其删除。

最佳答案

我不确定您的代码到底出了什么问题,但 MultipartFile 有一个 transferTo 方法,您可以使用它来替换大部分代码。通过减少编写的代码量,您将最大限度地减少出现错误的机会,并且可能会看到您的问题消失......

关于java - MultiPartFile 删除得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722111/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com