FileReader: свойство result
Базовая Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Примечание: Эта функция доступна в Веб-воркерах.
Чтение-только свойство result интерфейса FileReader возвращает содержимое файла. Это свойство становится доступным только после завершения операции чтения, а формат данных зависит от метода, используемого для инициирования операции чтения.
Значение
Соответствующая строка или ArrayBuffer, в зависимости от метода чтения, используемого для инициализации операции чтения. Значение равно null если чтение еще не завершено или было неуспешным.
Типы результатов описаны ниже.
| Метод | Описание |
|---|---|
readAsArrayBuffer() | result — JavaScript ArrayBuffer содержащий двоичные данные. |
readAsBinaryString() | result содержит необработанные двоичные данные из файла в виде строки. |
readAsDataURL() | result — строка с data: URL, представляющая данные файла. |
readAsText() | result — текст в виде строки. |
Примеры
В этом примере представлена функция reader(), которая считывает файл из элемента ввода файла. Она работает путем создания объекта FileReader и создания обработчика событий load, так что при чтении файла значение result получается и передается в функцию обратного вызова, переданную в reader().
Содержимое обрабатывается как необработанные текстовые данные.
// Given this HTMLInputElement of type="file":
// <input id="image" type="file" accept="image/*">
function reader(file, callback) {
const fr = new FileReader();
fr.onload = () => callback(null, fr.result);
fr.onerror = (err) => callback(err);
fr.readAsDataURL(file);
}
document.querySelector("#image").addEventListener("change", (evt) => {
// No files, do nothing.
if (!evt.target.files) {
return;
}
reader(evt.target.files[0], (err, res) => {
console.log(res); // Base64 `data:image/...` String result.
});
});
Учитывая асинхронный характер FileReader, вы можете использовать подход на основе Promise. Вот пример для элемента ввода файла с атрибутом multiple, который возвращает Promise.
// Given this HTMLInputElement:
// <input id="images" type="file" accept="image/*" multiple>
const reader = (file) =>
new Promise((resolve, reject) => {
const fr = new FileReader();
fr.onload = () => resolve(fr);
fr.onerror = (err) => reject(err);
fr.readAsDataURL(file);
});
async function logImagesData(fileList) {
let fileResults = [];
const frPromises = fileList.map(reader);
try {
fileResults = await Promise.all(frPromises);
} catch (err) {
// In this specific case, Promise.all() might be preferred
// over Promise.allSettled(), since it isn't trivial to modify
// a FileList to a subset of files of what the user initially
// selected. Therefore, let's just stash the entire operation.
console.error(err);
return;
}
fileResults.forEach((fr) => {
console.log(fr.result); // Base64 `data:image/...` String result.
});
}
// HTMLInputElement type="file" Event handler:
document.querySelector("#images").addEventListener("change", (evt) => {
// If no files, do nothing.
if (!evt.target.files) {
return;
}
logImagesData([...evt.target.files]);
});
Спецификации
| Спецификация |
|---|
| File API # dom-filereader-result |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
result |
6 | 12 | 3.6 | 11 | 6 | 18 | 32 | 11 | 6 | 1.0 | 3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/FileReader/result