Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Согласно документации W3 :
При получении, если используется метод чтения readAsDataURL (), атрибут результата должен возвращать строку DOMString, которая является URL-адресом данных [RFC2397 ] кодирование файла или данных BLOB-объекта.
blockquote>Таким образом, ваш
reader.result
имеет значение null или DOMString. DOMString - это строка с 16-битными символами.Итак, чтобы проверить размер, вы должны:
Проверить, является ли
[114 ]reader.result
нулевым, если оно есть, затем выдать ошибку или отклонить обещаниеПроверьте длину вашей строки, зная, что каждый символ равен 2 байта
Бросьте ошибку, если длина * 2 больше 2 ^ 20, на самом деле 2 * 2 ^ 20 - это количество байтов в 2 МБ
Теперь давайте переведем его в код:
ReadAsBase64(file): Promise<any> { const reader = new FileReader(); const fileValue = new Promise((resolve, reject) => { reader.addEventListener('load', () => { const result = reader.result as DOMString; if (!result) reject('Cannot read variable'); if (result.length * 2 > 2**21) reject('File exceeds the maximum size'); // Note: 2*2**20 = 2**21 resolve(reader.result); }); reader.addEventListener('error', event => { reject(event); }); reader.readAsDataURL(file); }); return fileValue; }