Как скачать XML, не открывая браузер в другой вкладке - PullRequest
14 голосов
/ 05 октября 2010

У меня есть XML-файл для загрузки. Как вы все знаете, когда я даю ссылку ниже

<a href="some.xml">Downlad XML</a>

XML откроется в новой вкладке с его отображением. Тем не менее, я хотел бы знать, если есть способ, это можно скачать, как и другие файлы, такие как ZIP-файл

Ответы [ 6 ]

12 голосов
/ 05 октября 2010

HTTP-заголовок называется Content-Disposition, который определяется в RFC1806 следующим образом:

2.1 Тип встроенного распоряжения

Тело должно быть помечено inline, если оно предназначено для отображается автоматически при отображении сообщения. Встроенные кузовные детали должны быть представлены в порядке которые происходят, при условии нормальная семантика составных сообщений.

2.2 Тип размещения навесного оборудования

Кузова могут быть обозначены attachment, чтобы указать, что они отделить от основной части сообщение, и что их отображение не должно быть автоматическим, но зависит от дальнейших действий пользователя. MUA может вместо представить пользователя растрового изображения терминал с иконическим представлением из вложений, или, на символьные терминалы, со списком вложения, из которых пользователь Можно выбрать для просмотра или хранения.

Чтобы поместить заголовочное сообщение в файл xml, вам потребуется доступ к серверной части. Например, используя функцию header в php, вы можете написать что-то вроде:

header('Content-Disposition: attachment; filename="some.xml"');

Если у вас нет доступа к серверной части, вы можете попробовать следующий трюк JavaScript, который я нашел Googling (не уверен, будет ли он работать):

<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'some.xml');">Save this page</a> 
11 голосов
/ 19 мая 2015

Попробовав множество решений, это сработало для меня.

Попробуйте предоставить фиктивный аргумент для ссылки на файл, как показано ниже.

<a href="http://link/to/the/file.xml?dummy=dummy" download>Download Now</a>
3 голосов
/ 31 июля 2015

Я обнаружил, что достаточно просто щелкнуть правой кнопкой мыши веб-браузер и выбрать «Сохранить страницу как ...».

0 голосов
/ 12 мая 2017

Вот мое решение VBA.Макрос загрузит файл XML, сохранит его в папке файла макроса и сообщит пользователю, когда процесс будет завершен:

Sub SaveXMLFromWeb()

Dim XDoc As Object
Dim XMLpath As String, outPath As String

XMLpath = "http://example.com/examplefile.xml" 'change to your URL
outPath = ThisWorkbook.Path & "\yourFileName.xml" 'change output file name

Set XDoc = CreateObject("MSXML2.DOMDocument")

With XDoc
    .async = False
    .validateOnParse = False
    .Load (XMLpath)
    .Save (outPath)
End With

MsgBox ("XML file has been downloaded and saved in the following location:" & String(2, vbLf) & outPath)

End Sub
0 голосов
/ 26 сентября 2016

Подобно решению Мохда, описанному выше, я смог использовать атрибут загрузки, как указано здесь W3: http://www.w3schools.com/tags/att_a_download.asp. Классный трюк с этим маршрутом заключается в том, что вы можете указать, каким вы хотите, чтобы загружаемое имя файла было, если оно отличается от имени файла на сервере.

<a href="http://link/to/the/file.xml" download="downloadedfilename.xml">XML Download Text</a>
0 голосов
/ 05 октября 2010

используйте что-то вроде:

private function sendXml($xml, $label) {
        ob_clean();
        header('Content-type: text/plain; charset=UTF-8');
        header('Content-Disposition: attachment; filename="' . $label . '.xml"');
        echo ltrim($xml);
        ob_flush();
        exit;
    }
...