Я использую javascript и html canvas для изменения размеров jpeg-изображений. После изменения размера я использую canvas.toDataURL
как атрибут href в теге привязки, чтобы предоставить ссылку, в которой пользователи могут загружать измененные изображения.
Это хорошо работает до определенного размера изображения.
Похоже, что разные браузеры имеют разные ограничения на размер URL-адресов данных, как указано здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
В chrome, когда я превысил лимит размера url данных, ничего не происходит, когда я нажимаю ссылку для загрузки; никаких ошибок или чего-либо (насколько я могу судить).
Есть ли какой-то способ программно определить, слишком ли большой URL-адрес данных? Может быть, какое-то событие в браузере, которое покажет мне, не удалось ли щелкнуть ссылку загрузки?
В идеале я хотел бы определить, была ли загрузка успешной. Когда URL-адреса данных слишком велики, я хотел бы показать объяснение для конечного пользователя, описывающее, как щелкнуть правой кнопкой мыши по изображению и выбрать "сохранить как...", который всегда работает.
Обновление 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() размер ограничения загрузки