Я использую javascript и html canvas для изменения размеров jpeg-изображений. После изменения размера я использую canvas.toDataURL
как атрибут href в теге привязки, чтобы предоставить ссылку, в которой пользователи могут загружать измененные изображения.Возможно ли программно определить ограничение по размеру для URL-адреса данных?
Это хорошо работает до определенного размера изображения.
кажется, что разные браузеры имеют различные ограничения на размер URL-адресов данных, как указано здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
В хроме, когда я за ограничение размера URL-адрес данных, ничего не происходит, когда я нажимаю на загрузку ссылка; никаких ошибок или чего-либо (насколько я могу судить).
Есть ли какой-то способ программно определить, является ли URL-адрес данных слишком большим? Может быть, какое-то событие в браузере, которое покажет мне, не удалось ли щелкнуть ссылку загрузки?
В идеале, я хотел бы определить, была ли загрузка успешной. Когда URL-адреса данных слишком велики, я хотел бы показать объяснение для конечного пользователя, описывающее, как щелкнуть правой кнопкой мыши по изображению и выбрать «сохранить как ...», который всегда работает.
Update 1:
Похоже, используя canvas.toBlob
лучший обходной путь на данный момент. Вот документация api: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob.
Вот jsfiddle, который демонстрирует, как якорь HREF ссылки для скачивания сбой при использовании toDataURL
для больших холстах, но toBlob
, кажется, работает:
https://jsfiddle.net/upgradingdave/c76q34ac/3/
Вот некоторые StackOverflow вопросы: canvas.toDataURL() download size limit
Data protocol URL size limitations
Таким образом, Chrome бесшумно выходит из строя ... Когда Chrome не может предоставить избыточный URL-адрес данных, 'console.log (theDataURL.length)' сообщает нулевую длину или что-то еще? – markE
Спасибо за идею. Похоже, что 'theDataURL.length' возвращает правильную длину, даже если загрузка не удалась, к сожалению. – Upgradingdave
Простой любопытство, какова длина строки? Также вы можете попытаться установить dataURI как src img во время прослушивания его события ошибки. Не уверен, что он срабатывает, так как я никогда не производил слишком длинный dataURI, но если это не так, я думаю, это ошибка. (В прошлый раз, когда я пытался достичь этих ограничений, (не пытаясь загрузить), я нажимал maxLength строки перед maxLength dataURI, вы уверены, что это не что-то вроде хита памяти?) – Kaiido