Как подтверждать в java, - ли файл типа, который показывает Ваше расширение?

Например, если у меня есть файл видео, и я меняю ему расширение mp4 в txt, Ваша внутренняя структура продолжает быть структурой видео. Но как он мог бы обнаруживать, что это продолжать быть видео, если расширение было изменено. Я исследовал и знаю, что у каждого расширения есть некие байт или некая структура, которая идентифицирует их, но я не знаю, как использовать это, чтобы подтверждать то, что говорит мой вопрос.

4
задан 17.01.2017, 01:24
0 ответов

Ты мог бы определять MIME TYPE файла, посредством Files.probeContentType ().

Например для так называемого файла archivo_video.mp4, MIME TYPE для этого типа файла: video/mp4, если ты меняешь расширение; посредством Files.probeContentType () ты мог бы получать тип и определять, что тип содержимого - действительно твой файл:

File archivo = new File("C:\\archivos\\archivo_video.txt);
try
{
   String tipodeArchivo = Files.probeContentType(archivo.toPath());
}
catch (IOException ioException)
{
    System.out.println("Error: " + ioException.getMessage());
}
3
ответ дан 03.12.2019, 17:39
  • 1
    Забота, использовав этот mé все. Segú n об официальном руководителе Java , упоминают (é nfasis mí a): " The implementation of this method is highly platform specific and is not infallible . The content type is determind by the platform' s default file type детектор . For example, if the детектор определи в file' s content type to be application/x-java based on the .class расширение, it might be fooled." Это значит, что возможно этот mé все не функционировало такой который OP надеется на Windows. –  17.01.2017, 01:54
  • 2
    Я согласовываюсь, но ввиду множества возможностей в различных типах файлов, она не кажется плохой мыслью начинать с probeContentType (...) и потом подтверждать с одним из mé все чтения контента файла проверять результат. –  17.01.2017, 02:22
  • 3
    @StefanNolde есть доклады, которых это не удается много в Windows и Мак. Я сделал доказательство, чтобы это подкреплять и, действительно, не определяет тип, приведенный в соответствие в этих ВЫ, используя Java 8. Я это не вижу безопасным способом подтверждать общий MIME type. –  17.01.2017, 03:02
  • 4
    Хорошая информация, если осуществления так мало заслуживающие доверия, вероятно лучше подтверждения прямо контента segú n extensió n. Наконец завись от использования - я хочу угадать, что я имею в файле, или хочу подтвердить только, если extensió n отразь контент правильно. –  17.01.2017, 03:08
  • 5
    если изображение было послано из-за ajax в формате base64 có mo он возможный санкционировать тип файла с этой формой?? я должен декодировать изображение снова и потом санкционировать ее? –  22.06.2018, 19:56

Ты можешь открывать файл как RandomAccessFile и читать метаданные о файле (согласно спецификациям файла, который ты надеешься найти).

В случае Международной организации по стандартизации контейнеры например он тебе касается находить box ftyp, у которого есть следующий формат:

<nnnn> - 4 bytes tamaño del box
 ftyp  - 4 bytes ASCII "ftyp" (literalmente)
<cccc> - 4 caracteres código de tipo mayor (por ejemplo "mp41" para mp4 versión 1
<bbbb> - 4 bytes versión

оставшаяся часть данных уже опциональная, больше информации ты (на английском) находишь здесь, список больших типов здесь.

С файлом видео, основанное на Международной организации по стандартизации, ты можешь получать превосходящий такой тип:

byte[] tipo = new byte[4];
try{
    RandomAccessFile file = new RandomAccessFile("mifile.ext","r");
    file.skipBytes(8); // salta tamaño y "ftyp"
    file.read(tipo);
    String sTipo = new String(tipo);
    System.out.println(String.format("Tipo de archivo: %s", sTipo));
    file.close();
catch (Exception e){
    e.printStackTrace();
}

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

2
ответ дан 03.12.2019, 17:39

Теги

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