В основном я написал сценарий, который генерирует XML-файл на основе ввода пользователем. После того, как файл сгенерирован, ссылка загрузки выглядит так:
<a href="path/to/file.xml">Download File</a>
Но при нажатии на него открывается xml в браузере, я хочу, чтобы он начал загружаться, когда вместо него была нажата ссылка. Есть ли способ достичь этого?
Да, есть. Это требует указания некоторых заголовков. Точно как это работает, зависит от того, какой язык вы используете, но вот пример использования php, снятый с php.net:
<?php // We'll be outputting a PDF header('Content-type: application/pdf'); // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('original.pdf'); ?>
В основном, сначала мы говорим клиенту, какой тип файла мы отправляем, а затем мы говорим клиенту, что то, что мы отправляем, является вложением, а это имя, а не страница, отображаемая, а затем, наконец, мы печатаем / прочитайте файл на выходе.
Учитывая, что вы уже используете php для генерации xml-файла, я бы предложил добавить команды заголовка выше в код, который генерирует XML-файл, и посмотреть, не делает ли это трюк.
Если вы используете Apache для своего веб-сервера и всегда хотите принудительно загрузить XML-файлы, есть более эффективный способ сделать то, что предложил @chigley. Просто добавьте следующее в файл .htaccess
.
<Files *.xml> ForceType application/xml Header set Content-Disposition attachment </Files>
Что происходит, когда браузер видит ссылку не зависит от ссылки, а скорее от цели ссылки. Ваш веб-сервер должен отправить соответствующий заголовок: Content-Disposition: attachment;filename="file.xml"
чтобы сообщить браузеру, что он должен предлагать сохранить файл вместо его отображения.
Это зависит от того, что клиентский компьютер делает с XML-файлами. Если вы дважды щелкнете по файлу XML, он, вероятно, откроется в вашем браузере.
download.php:
header('Content-Type: text/xml'); header('Content-Disposition: attachment; filename="file.xml"'); readfile('/path/to/file.xml');
HTML:
<a href="download.php">Download</a>