2015-05-18 3 views
-1

Цель: Пользователь загружает изображение, проверяющий проверяет, является ли он файлом изображения, который пользователь загрузил, возвращает сообщение, если это не изображение, если нет является., если утверждение, кажется, никогда не оценивается false

Ошибка: При нажатии кнопки «Загрузить» независимо от того, является ли загруженный файл изображением или нет изображения, сообщение валидатора всегда возвращается.

Площадь фокуса: В классе Validator строка System.out.println(partValueContentType); написала тип контента на консоль, например. image/jpeg, но когда он протестирован в заявлении if, он вообще не оценивает тип содержимого.

 String partValueContentType = part.getContentType(); 
     System.out.println(partValueContentType); 

     if (!partValueContentType.equals("image/jpeg") 
       || !partValueContentType.equals("image/jpg") 
       || !partValueContentType.equals("image/gif") 
       || !partValueContentType.equals("image/png")) 
     { 
      FacesMessage msg = new FacesMessage("File is not an image.", 
        "Acceptable image types (jpeg, jpg, gif, png)"); 
      msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
      throw new ValidatorException(msg); 
     } 

Как это вызвано и как я могу его решить?

+7

Возьмите хорошую чашку кофе и смотреть на него AG айн. Заменить каждое отдельное условие на «true» или «false». В конце концов, все в порядке? – BalusC

+0

Для целей отладки укажите фактическое значение 'partValueContentType'. т.е. «FacesMessage msg = new FacesMessage (« Файл не является изображением »), « Приемлемые типы изображений (jpeg, jpg, gif, png), но получили «+ partValueContentType»; ' –

+3

@DilumRanatunga: Вам также нужна хорошая чашка кофе. – BalusC

ответ

1

Ваш если заявление поодаль:

String partValueContentType = part.getContentType(); 
System.out.println(partValueContentType); 

if (!(partValueContentType.equals("image/jpeg") 
     || partValueContentType.equals("image/jpg") 
     || partValueContentType.equals("image/gif") 
     || partValueContentType.equals("image/png"))) 
{ 
    FacesMessage msg = new FacesMessage("File is not an image.", 
      "Acceptable image types (jpeg, jpg, gif, png)"); 
    msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
    throw new ValidatorException(msg); 
} 

С точки зрения проверки, вы можете проверить сам файл, чтобы убедиться, что это действительно картина (это не .zip скрытие как .jpeg) и, возможно, соблюдение ограничений на размер файлов ...


Или использовать HashSet:

String partValueContentType = part.getContentType(); 
System.out.println(partValueContentType); 
Set<String> acceptedMimeTypes = new HashSet<>(Arrays.asList("image/jpeg", "image/jpg", "image/gif", "image/png")); 

if (!acceptedMimeTypes.contains(partValueContentType)) 
{ 
    FacesMessage msg = new FacesMessage("File is not an image.", 
      "Acceptable image types " + Arrays.toString(acceptedMimeTypes.toArray())); 
    msg.setSeverity(FacesMessage.SEVERITY_ERROR); 
    throw new ValidatorException(msg); 
} 
+0

Или просто проверьте, начинается ли оно с 'image /'. См. Также http://www.stackoverflow.com/questions/4169713/how-to-check-a-uploaded-file-whether-it-is-a-image- or-other-file – BalusC

+0

Это правда, но этот ответ был больше связан с вопросом - OP должен следовать по ссылке, которую вы предоставили для лучшей реализации. – justderb

+0

Эй, @justderb. Мне нравится пример HashSet, который вы предоставили, и будете использовать его один раз Я добираюсь до ноутбука, над которым я развиваюсь. Я согласен, что файл должен быть проверен, чтобы убедиться, что он действительно является файлом типа изображения. Именно по этой причине я использую этот код. Является ли метод getContentType() не эффективным чтобы сделать это? Если нет, то что бы вы предложили? –

Смежные вопросы