Если мы говорим про современные браузеры, то ничего сложного, первым делом
-
Web/API/XMLHttpRequest/Sending_and_Receiving_Binar...
Ну, а дальше дело техники, после того как получили файл на клиенте:
// Создаём ссылку на него
const url = URL.createObjectURL(blob);
// А теперь маленький трюк, чтоб скачать
const dummy = document.createElement('a');
dummy.href = url;
dummy.download = 'my-filename.ext';
document.body.appendChild(dummy);
dummy.click(); // Готово
UPD: Совсем забыл, для IE ещё есть методы
msSaveBlob/msSaveOrOpenBlob