<a> элемент не распознает расширение файла автоматически при загрузке файла - PullRequest
0 голосов
/ 17 октября 2019

В настоящее время я разрабатываю приложение, в котором пользователь щелкает элемент, этот элемент вызывает функцию JS, а функция обрабатывает загрузку файла.

Файлы представляют собой отчеты, генерируемые динамически с помощью Devexpress XtraReportsмодуль , преобразованный в Base64 и затем отправленный обратно на сторону клиента. Когда клиент получает строку Base64, функция JS создает элемент <a>, устанавливает атрибут href на data:application/pdf;base64,JVBERi0xLjQNCiWio[...] и имитирует щелчок с событием click().

Вотфрагмент кода JS, который обрабатывает загрузку файла:

let downloadLink;

    try {
        downloadLink = executionId ? await getLinkPdfBase64(executionId) : false;
    } catch (error) {
        downloadLink = false;
        console.log(error);
    }

    if (downloadLink) {
        const aElement = document.createElement("a");
        downloadLink = "data:application/pdf;base64," + downloadLink;
        aElement.setAttribute("download", currentReportData.LayoutName);
        aElement.setAttribute("href", downloadLink);
        aElement.click();
        aElement.remove();
    } else {
        DevExpress.ui.dialog.alert( //Ignore this, it's a Devexpress component
            "Your report could not be generated",
            "Alert"
        );
    }

Проблема:

Когда я генерирую отчет с пользовательскими типами параметров, Devexpress генерирует его правильно(Base64, если преобразовано в строку, визуально правильно сформировано), но браузер (Google Chrome) загружает файл с расширением ". 0" .

Если отчет имеет нормальный Devexpressпараметры (например, Strings, Int32, Guids и т. д.)) файл загружается с правильным ". pdf" расширением.

Вот изображение правильно загруженного PDF и ".0"файл расширения:

Example Error Picture

Может ли функция JS быть причиной или решением проблемы? Если нет, то почти наверняка что-то не так с генератором отчетов (Devexpress).

Примечание: если я вручную изменю расширение ".0" на ".pdf", файл откроется, и онотображается / формируется правильно.

1 Ответ

0 голосов
/ 17 октября 2019

Оказывается, я решил эту проблему, просто добавив расширение ". Pdf" в атрибут download, поэтому, когда браузер не может его распознать, вы уже указываете, какое оноэто:

aElement.setAttribute("download", currentReportData.LayoutName + ".pdf");
...