Учитывая https://www.example.com/image-list
:
...
<a href="/image/1337">
<img src="//static.example.com/thumbnails/86fb269d190d2c85f6e0468ceca42a20.png"/>
</a>
<a href="//static.example.com/full/86fb269d190d2c85f6e0468ceca42a20.png"
download="1337 - Hello world!.png">
Download
</a>
...
Это среда пользователя script, поэтому у меня нет доступа к конфигурации сервера. Таким образом:
- Я не могу заставить сервер принимать дружественные имена файлов, например
https://static.example.com/full/86fb269d190d2c85f6e0468ceca42a20 - 1337 - Hello World!.png
. - Я не могу настроить совместное использование ресурсов Cross-Origin.
www.example.com
иstatic.example.com
отделены стенкой CORS по дизайну.
Как заставить Firefox и Chrome отображать диалог "Сохранить файл как" с предлагаемым именем файла "1337 - Hello world!.png", когда пользователь нажимает ссылку "Загрузить"?
После некоторых неудачных попыток и поиска в Google я понял эти проблемы:
- Firefox полностью игнорирует существование атрибута
download
для некоторых типов изображений MIME. - Firefox полностью игнорирует существование атрибута
download
для межсайтовых ссылок. - Chrome полностью игнорирует значение атрибута
download
для межсайтовых ссылок.
Все эти моменты не имеют для меня никакого смысла, все выглядят как "пусть случайные нечувствительные ограничения на эту функцию", но я должен принять их в качестве своей среды.
Существуют ли какие-либо способы решения проблемы?
Справочная информация. Я пишу пользователя script для платы изображений, которая использует хеши MD5 в качестве имен файлов. Я хочу сделать экономию с удобными именами проще. Все, что приблизит меня к этому, было бы полезно.
Я думаю, что я могу обойти ограничения, используя URL-адреса объектов для blobs и локальный прокси-сервер с взломанными заголовками CORS, но эта настройка явно не поддается разумному. Сохранение через холст может работать (в этом случае также "защищены" изображениями CORS?), Но это либо приведет к сжатию с двойной потерей, либо к преобразованию с потерями в без потерь, если файлы JPEG не будут хорошими.