проверка загрузки файла MIME в формате Java - PullRequest
0 голосов
/ 29 мая 2018

Я использую mimeutil для проверки mimetype файла.И только позволяя файлы CSV и JSON.Но получаю этот mime-тип для jime-файла "application / x-ipynb + json", который нигде не найден.Любая помощь будет полезна для получения точного mime-типа файла, если он также переименован в exe-файл в json, что не должно быть разрешено по соображениям безопасности.См. Ниже код для справки:

public static String verifyExtension(MultipartFile File){
String mimeType = null;
        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");
        //MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
        MimeUtil.registerMimeDetector(System.getProperty("os.name").startsWith(
              "Windows") ? "eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector"
              : "eu.medsea.mimeutil.detector.OpendesktopMimeDetector");

        Collection<?> mimeTypes = null;
        try {
            mimeTypes = MimeUtil.getMimeTypes(File.getBytes());
            if(mimeTypes.equals("application/vnd.ms-excel") || mimeTypes.equals("application/json") 
                    || mimeTypes.equals("application/octet-stream"))
            {
                System.out.println("File typ is csv or json");
                mimeType = "success";
            }else{
                mimeType = "fail";
            }
        } catch (MimeException e1) {
            System.out.println(e1.getMessage());
            mimeType = "fail";
        } catch (IOException e1) {
            System.out.println(e1.getMessage());
            mimeType = "fail";
        }
}

1 Ответ

0 голосов
/ 29 мая 2018

Ваша проблема в том, что проверки типов MIME в java основаны на расширении файла.

Чтобы выполнить анализ файла, попробуйте Apache Tika Mime Magic Detection .

Кроме того, вы можете попробовать одно из следующих действий:

  1. ZIP-файл перед загрузкой, затем разархивировать на сервере и проверить MIME-тип
  2. Загрузка через масштабируемую 3-юстороннее решение, например S3 bucket
  3. Переименуйте загруженный файл, но отправьте имя файла в заголовке или параметре URL и проверьте его для mime-типа
...