MultiPartFile удален слишком рано - PullRequest
0 голосов
/ 09 октября 2018

Я использую 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(), но это не решение, которое я ищу.Мне нужно сохранить файл в некотором временном каталоге, и после того, как я манипулирую им, удалите его.

1 Ответ

0 голосов
/ 09 октября 2018

Я не уверен, что именно происходит в вашем коде, но MultipartFile имеет метод transferTo, который вы можете использовать для замены большей части кода.Сокращая объем кода, который вы пишете, вы уменьшите вероятность ошибки и, возможно, увидите, что ваша проблема исчезнет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...