Angular 7+: как разрешить загрузку только файлов с контентом в utf-8? - PullRequest
1 голос
/ 30 апреля 2019

Я использую Angular 7+, у меня есть простая функция для загрузки файлов и чтения их содержимого, но я хотел бы знать, как определить кодирование содержимого документа, чтобы разрешить только документы с кодированием utf-8.

async uploadFile(event) {
    var document;
    var reader = new FileReader();
    let file = event.target.files[0];

    reader.onload = ((file: any) => {
      return (e: any) => {
        document.description = e.srcElement.result;
        document.title = title;
        document.fileName = file.name;
      }
    })(file);

    reader.readAsText(file);
  }

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Не существует пуленепробиваемой техники для получения кодировки текстового файла. В любом случае, библиотека с именем jschardet пытается достичь этой цели.

function read(f) {
  var reader = new FileReader();
  reader.readAsText(f);
  reader.onload = function(e) {
    console.log(jschardet.detect(reader.result))
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jschardet/2.1.0/jschardet.min.js"></script>
<input type="file" onchange="read(this.files[0])"></input>
0 голосов
/ 30 апреля 2019

Вот документация FileReader.readAsText ()

instanceOfFileReader.readAsText (blob [, кодировка]);


Чтобы убедиться, что загруженный файл находится в UTF-8, выполните:

instanceOfFileReader.readAsText(blob, 'UTF-8');

Знайте, что UTF-8 является настройкой по умолчанию, поэтому он должен работать:

instanceOfFileReader.readAsText(blob);

Если кодировка не UTF-8, чтение должно завершиться неудачей.Я не видел никакой документации по этому поводу, рассматривая this в качестве нормативной документации.

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


Нет атрибута с именем encoding или чего-либо подобного в FileReader документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...