Вы даже можете сделать это лучше, чем просто URI. Используя Chrome, вы также можете предложить имя, которое будет принимать файл, как описано в в этом сообщении в блоге об именовании загрузки при использовании URI .
Ответ на этот вопрос, это другой ответ https://stackoverflow.com/a/6102526/6110285
Я бы сказал, что это дубликат этот вопрос
В основном base64 кодирует 3 байта в 4, поэтому, если отступ ( = ) пропускает 1 или 2 байта из декодирования, ошибка, которую вы упоминаете, поднята