Ответ (вроде) на проблему № 2:
Поскольку вы обнаружили, что схема именования в одном браузере не работает в другом, ваше единственное решение состоит в том, чтобы сделать это по-разному для каждого браузера, аналогично примеру здесь .
В случае, если ссылка исчезнет, решение в основном:
1. If browser is IE URL encode filename
2. Generate Content-disposition header
Конечно, определение того, является ли браузер IE пользовательским агентом (это единственный способ сделать это), чревато всевозможными опасностями.
Как бы странно это ни звучало в Северной Америке, если важно, чтобы эта работа работала в большом количестве неконтролируемых вами браузеров, в которых может быть заблокирован или изменен пользовательский агент, просто избегайте символов в кодировке UTF-8 имя файла и всегда используйте «Скачать» или что-то.