Legendarniy
@Legendarniy

Как правильно перегнать файл в blob?

Мне нужно перегнать файл в blob. Делаю так

export function сonvertFilesToBlob(e) {
const files = Object.keys(e.target.files);
  const asyncReadFile = eachFile =>
    new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.readAsArrayBuffer(e.target.files[eachFile]);
      reader.onload = () => {
        console.log(reader.result, 'reader.result');
        const buffer = new Uint8Array(reader.result);
        const binaryString = String.fromCharCode.apply(null, buffer);
        console.log(buffer, 'buffer', binaryString, 'binaryString');
      };
      // reader.onerror = error => reject(error);
    });

  return Promise.all(files.map(asyncReadFile));
}

Собственно вот тут console.log(buffer, 'buffer', binaryString, 'binaryString'); получаю вот такой результат Uint8Array(18) [208, 154, 208, 176, 208, 178, 208, 176, 208, 177, 208, 176, 208, 189, 208, 179, 208, 176] "buffer" "Ðавабанга" "binaryString". И я не понимаю, все ли я верно делаю? Перегоняю обычный .txt файл с содержимым Кавабанга. На выходе должен получить вот такой результат 0JrQsNCy0LDQsdCw0L3Qs9Cw. Может чего упустил и делаю не так?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Ну во-первых, File унаследован от Blob. Если на выходе нужен все же Blob, то перегонять ничего не нужно, Ваш файл по факту уже Blob.
Во-вторых, если все же нужен ArrayBuffer, то читаете Вы все верно. Неверно же вы декодируете буффер в строку. Строки в JS представлены кодировкой utf16, где 2 байта на символ, Вы же отдаете строке по 1 байту на символ (так как view у Вас Uint8Array а не Uint16Array). Ну и плюс, скорее всего строка в файле находится в отличной от utf16 кодировке (например utf8), но никакого перекодирования у Вас нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы