Как упоминалось в заголовке, я использую JS, URL-адрес привязки и атрибут загрузки, чтобы получить файл из внешней системы.
Проблема в том, что мне нужно загрузить его под определенным именем файла, а предварительный просмотр PDF-файла содержит заголовок Contain-Disposition
с именем файла с сервера. В Chrome заголовок из этого заголовка имеет более высокий приоритет, и я не знаю, как настроить или переопределить заголовок этого заголовка.
Есть ли обходной путь для этого, используя только клиентский JavaScript?
Когда появится диалоговое окно «Сохранить», пользователь может отредактировать имя файла, чтобы вам не приходилось зацикливаться на имени файла в заголовке.
Как предложил @Dai в комментариях, вы можете использовать реализацию, подобную следующей, чтобы переопределить имя файла в заголовке Content-Disposition
:
fetch("url_to_your_pdf_file.pdf")
.then((response) => response.blob())
.then((blob) => {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = "desired_filename.pdf";
a.click();
URL.revokeObjectURL(url);
})
.catch((error) => {
console.error("Error fetching the PDF:", error);
});
Функция fetch является частью чистого JavaScript, для ее использования не требуются никакие внешние библиотеки.
Используйте
fetch
, чтобы загрузить PDF-файл в объектBlob
в памяти в JS, затем используйтеcreateObjectURL
так, чтобы для скрытогоHTMLAnchorElement
были установленыHTMLAnchorElement.href = URL.createObjectURL( blob )
и.download
, а затем вызовите.click()
.