Проверка: как проверить, находится ли загружаемый файл в формате Excel?- Apache POI - PullRequest
1 голос
/ 18 декабря 2011

Есть ли способ проверить, находится ли загружаемый файл в формате Excel?Я использую библиотеку Apache POI для чтения Excel и проверяю расширение загруженного файла при чтении файла.

Фрагмент кода для получения расширения

String suffix = FilenameUtils.getExtension(uploadedFile.getName());

любезно BalusC: загрузкаfiles-with-jsf

String fileExtension = FilenameUtils.getExtension(uploadedFile.getName());
if ("xls".equals(fileExtension)) {
//rest of the code
}

Я уверен, что это неправильный способ проверки.

Пример кода для кнопки просмотра

<h:inputFileUpload id="file" value="#{sampleInterface.uploadedFile}" 
        valueChangeListener="#{sampleInterface.uploadedFile}" />

Пример кода для кнопки загрузки

<h:commandButton action="#{sampleInterface.sampleMethod}" id="upload" 
value="upload"/>

Пользователь может изменитьрасширение файла документа или документа до "xls" и загрузка, тогда это, безусловно, вызовет исключение при чтении файла.

Просто надеясь, что кто-нибудь может мне что-то дать.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

Вы не можете проверить это перед подачей в POI.Просто поймайте исключение, которое POI может генерировать при разборе.Если выдается исключение, вы можете просто показать конечному пользователю FacesMessage, что загруженный файл не поддерживается

0 голосов
/ 19 августа 2012

Пожалуйста, постарайтесь быть более полезным для автора.Конечно, вы можете проверить перед poi.Регулярные тесты, выполняемые перед попыткой / уловом, включают следующее.Я предлагаю отказоустойчивый подход.

  1. Это "хороший" файл?

    1. если file.isDirectory () -> die и выйти.
    2. if! File.isReadable () -> die и выйти.
    3. если file.available <= 100 -> die и выйти (включая нулевой размер файла)
    4. если файл.size> = какое-то нелепое большое число (проверьте ваш самый большой файл Excel и умножьте на 10)
  2. Файл выглядит хорошо, но содержимое, как в Excel?

    1. Начинается ли с «Р» -> если нет, умри.
    2. Содержит ли он текст «Лист» -> если нет, умри
    3. Некоторые другие внутренние байты Excel, которые яВы, ребята, ожидаете здесь.
...