Я использую MultPartFile для загрузки .zip из моего интерфейса, иногда , этот файл удаляется, прежде чем я что-то с ним сделаю.Я отлаживаю CommonsMultipartFile.class (intellij), чтобы очистить мои идеи, но не могу найти ничего, что объясняет, почему иногда я могу манипулировать MultPartFile, а иногда нет.
В CommonsMultipartFile.class Файл удаляется, когда он передаетдля метода isAvailable (), а когда 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()
, но это не решение, которое я ищу.Мне нужно сохранить файл в некотором временном каталоге, и после того, как я манипулирую им, удалите его.