Google Chrome не позволяет задать имя скачиваемому файлу
Общая ситуация такова: после клика на ссылку в новой вкладке браузера открывается окошко с файлом, который позже скачивают стандартными браузерными downloader'ами. Реализация основных моментов:
Получение URL файла:
public getFileObjectUrl = async (route: string, filename: string): Promise<string> => {
const data = await this.get<any>(route, { asBlob: true });
const extension = filename.split('.').pop();
const mimeType = extension === "csv" ? "text/plain" : lookup(filename);
// в этом конструкторе вторым параметром как раз и передается имя файла
const file = new File([data], filename, { type: mimeType ? mimeType : undefined });
return window.URL.createObjectURL(file);
}
Непосредственно открытие вкладки:
const onOpenDocument = async (document: AttachedDocumentModel) => {
const fileUrl = await Server.getFileObjectUrl(documentUrl(document.Id), document.Name);
window.open(fileUrl, "blank");
}
Метод documentUrl() возвращает путь к соответствующему контроллеру.
В браузере Firefox данный метод работает. При скачивании мы получаем файл с тем именем, под которым он был сохранен в БД. В Chrome же получаем сгенерированное имя BLOB-объекта.
На сервере для данного файла проставляется атрибут Content-Disposition: "attachment"; filename="Имя_файла.pdf".
Вопрос: в чем может быть причина подобной привередливости Chrome?