2013-06-04 2 views
0

У меня есть массив JSON на стороне клиента, который отображается в пользовательском интерфейсе. Пользователь хочет загрузить содержимое в виде файла. Как я могу отправить контент с клиентской стороны на сервер и загрузить как файл.Загрузить файл с помощью Javascript

Я обнаружил, что запрос POST Ajax не позволит нам скачать файл. Как я могу это сделать?

+0

Связанный: http://stackoverflow.com/questions/566922/how-do-i-download-javascript-string-as-a-file?rq=1 –

+0

Является ли JASON доступным с сервера в виде отдельного файла ? Имеет ли он URL? – HBP

+0

Вы действительно хотите скачать файл с помощью JavaScript или будете ли вы удовлетворены просто принуждением браузера выполнять загрузку ресурса, а не отображать его, когда браузер переходит к ресурсу? – apsillers

ответ

1

Если содержание только доступно на клиенте, вам необходимо отправить его на сервер. Попробуйте что-то вроде этого:

<a id="download_link">Download</a> 
$('#download_link').on('click', function(e){ 
    e.preventDefault(); 
    window.location = 'my-handler.php?json=' + myJsonString; 
}); 
// or without jQuery 
document.getElementById('download_link').onclick = function(){ 
    window.location = 'my-handler.php?json=' + myJsonString; 
}; 

Затем заставить загрузку в my-handler.php, используя данные, отправленные на сервер как содержимое файла:

// Use equivalent in your server side script if not using PHP 
$filename = 'download-'.time().'.json'; 
header('Content-Type: application/octet-stream'); 
header('Content-Transfer-Encoding: Binary'); 
header('Content-disposition: attachment; filename="'.$filename.'"'); 
exit($_GET['json']); 

Используя этот метод, текущее окно не должно быть заменено, но начало загрузки должно начаться, но вы можете открыть i n новое окно, если хотите.

Это быстрое и грязное решение. Обратите внимание, что это позволит человеку вводить что угодно и загружать файл. Возможно, было бы разумно хотя бы проверить содержание в первую очередь. Также могут быть проблемы с слишком большим содержанием.

+0

Хотя это должно сработать, я чувствую, что это может быть плохим решением, но я не могу представить себе хорошую альтернативу, не становясь слишком сложной. Ждем комментариев. –

Смежные вопросы