Как выбрать метод чтения FileReader? - PullRequest
0 голосов
/ 10 октября 2018

Создавая простой загрузчик изображений, я изучаю API FileReader.Существует 4 формата: буфер массива, двоичная строка, URL-адрес данных и текст для загрузки файла, и я хотел бы знать, как выбрать один из них.

Из нескольких статей this говорит, что URL-адрес данных хорош, когда вы хотите показать загруженное изображение, и буфер массива хорош, когда вы манипулируете файлом.Как вы думаете?И когда можно выбрать двоичные строки или текстовые форматы?

1 Ответ

0 голосов
/ 10 октября 2018

Для «File Uploader» вы просто не должны использовать FileReader вообще.

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

Если вам нужно отобразить его на текущей странице, вам все равно не нужен FileReader, создайте blobURI из Blob , который будет указывать непосредственно на файл на диске, снет бесполезного вздутия памяти.

inp.onchange = e => {
  // yes that's all synchronous...
  const url = URL.createObjectURL(inp.files[0]);
  const img = new Image();
  img.src = url;
  document.body.appendChild(img);
};
<input type="file" id="inp" accept="image/*">

Единственный вариант использования FileReader - это когда вам необходим доступ к содержимому файла, например,

  • Если вы хотите загрузить текстовый файл (или csv, или json) и проанализировать его, то вы будете использовать метод readAsText().
  • если вы хотите прочитать / отредактировать некоторый двоичный файл (например, прочитать метаданные файла JPEG?), Тогда вы будете использовать readAsArrayBuffer() и работать из этого буфера.
  • readAsDataURL(), к сожалению, слишком часто используется неправильно. Как уже говорилось ранее, в 99% случаев то, что вы будете делать с этим dataURI, может быть сделано с blobURI или Blob напрямую.Единственный случай, который я вижу, это добавить двоичные данные в какой-то отдельный документ ... Или что-то, что не происходит каждый день на каждом сайте ...
  • readAsBinaryString() довольно бесполезно,и даже были удалены из стандартов.Если вам действительно нужно двоичное строковое представление вашего файла, вы можете сгенерировать его из ArrayBuffer, но что вы будете делать с этой строкой - загадка.(работать с ArrayBuffer напрямую).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...