- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
每当用户旋转手机时,我都需要读取 DIV 的像素宽度。在 iOS 上,以下代码将在方向完成后打印出 DIV 的宽度。但是,在 Android 上,代码将在方向开始之前打印出 DIV 的宽度。 HTML
我的网站正在使用jquery.load()在页面的一大块上进行导航。我真的很欣赏只包含加载内容的特定部分的能力,这里是 id="content"的 div: $(frame_selector).loa
我是一名优秀的程序员,十分优秀!