Разархивирование MultipartFile становится поврежденным

У нас была такая же проблема. Но это было не очень важно для нас, потому что нам пришлось решать другие более серьезные проблемы с помощью Hibernate Query и Session.

В частности:

  1. контроль, когда транзакция может быть совершено. (мы хотели подсчитать, сколько раз tx был «запущен» и только фиксировать, когда tx «закончился» столько же раз, сколько он был запущен. Полезно для кода, который не знает, нужно ли ему начинать транзакцию.
  2. Сбор показателей производительности.
  3. Откладывание начала транзакции до тех пор, пока не станет известно, что что-то действительно будет сделано .
  4. Более мягкое поведение для query.uniqueResult ()

Итак, для нас мы имеем:

  1. Создаем интерфейс (AmplafiQuery ), который расширяет Query
  2. Создает класс (AmplafiQueryImpl), который расширяет AmplafiQuery и обертывает org.hibernate.Query
  3. Создает Txmanager, который возвращает Tx.
  4. Tx имеет различные методы createQuery и возвращает AmplafiQueryImpl

И, наконец,

AmplafiQuery имеет «asList ()», который является универсальной версией Query.list () У AmplafiQuery есть «unique ()», который является универсальной версией Query.uniqueRe sult () (и просто регистрирует проблему, а не бросает исключение)

Это большая работа, чтобы просто избежать @SuppressWarnings. Однако, как я уже сказал (и перечислены), есть много других лучше! причины для выполнения работ по упаковке.

0
задан Patel Romil 25 March 2019 в 15:42
поделиться

1 ответ

Это были две основные причины для поврежденного файла.

  • Закройте соединения. Я использовал блок finally, чтобы убедиться, что соединение будет закрыто.
  • Убедитесь, что путь к файлу указан правильно, и получите файл для ZipEntry

Вот решение.

public String createZipfile(User user,MultipartFile[] uploadingFiles,String name,String category) throws Exception
    {
        List<String> srcFiles = new ArrayList<String>();
        Date localDateTime = new Date();
        System.out.println(localDateTime.toString().replaceAll(":", ""));
        LocalTime time = LocalTime.now();
        String filetime = (localDateTime.toString().replaceAll(":", ".")).replaceAll("IST ", ""); //time.toString().replaceAll(":", ".");
        String finalFileName = category+"_"+name+"_"+user.getName()+"_"+filetime+".zip";

        try 
        {           
            FileOutputStream fos = new FileOutputStream("F:\\FolderName\\FolderName\\Test\\"+finalFileName);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            try 
            {   
                int i=0;
                for(MultipartFile uploadFile:uploadingFiles)
                {       
                    srcFiles.add(i, uploadingFiles[i].getOriginalFilename());

                    java.io.File convFile = new java.io.File(uploadingFiles[i].getOriginalFilename());
                    convFile.createNewFile(); 
                    byte[] b;
                    b = uploadingFiles[i].getBytes();                   

                    java.io.File fileToZip = new java.io.File(convFile.toString());
                    FileInputStream fis = new FileInputStream(fileToZip);

                    ZipEntry zipEntry = new ZipEntry(uploadingFiles[i].getOriginalFilename());
                    zipOut.putNextEntry(zipEntry);
                    byte[] bytes = uploadingFiles[i].getBytes();
                    zipOut.write(bytes, 0, uploadingFiles[i].getBytes().length);

                    fis.close();
                    zipOut.closeEntry();
                    i++;
                }       
           } 
            catch (IOException e) {
                e.printStackTrace();
                throw new Exception("File Zipping Error");
            }
            finally {
                zipOut.finish();
                zipOut.flush();
                zipOut.close();
                fos.close();
            }
        }
        catch (Exception e) {
            throw new Exception("File Upload Error");
        }

        return finalFileName;
    }
0
ответ дан Patel Romil 25 March 2019 в 15:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: