Если вы используете Node.js (например, если не вырезать и вырезать из нашего модуля), попробуйте этот пакет: https://www.npmjs.org/package/dataobject-parser
Построен модуль, который выполняет операции прямого / обратного действия:
https://github.com/Gigzolo/dataobject-parser
Он создан как объект, управляемый самостоятельно. Используется для экземпляра экземпляра DataObjectParser.
var structured = DataObjectParser.transpose({
'ab.cd.e' : 'foo',
'ab.cd.f' : 'bar',
'ab.g' : 'foo2'
});
structured.data()
возвращает ваш вложенный объект:
{ab: {cd: {e:'foo', f:'bar'}, g:'foo2'}}
Итак, вот рабочий пример в JSFiddle:
Я не думаю, что это можно сделать, хотя я не уверен на 100%.
Обычная вещь (например, на популярных сайтах загрузки) - это обратное: сначала вы переходите к после , а затем начнется загрузка.
Поэтому перенаправляйте своих пользователей на страницу final , которая (среди прочего) говорит:
Ваш загрузка должна начинаться автоматически. Если не нажать [a href="create_csv.php"]here[/a]
.
Как о начале загрузки (например, при автоматическом вызове create_csv.php) у вас есть много вариантов:
[meta http-equiv="refresh" content="5;url=http://site/create_csv.php"]
location.href = 'http://site/create_csv.php';
[iframe src="create_csv.php"][/iframe]
Заголовок, который вы отправляете, - это HTTP-заголовки. Браузер принимает это как запрос страницы и обрабатывает его как страницу. И в вашем случае нужно загрузить страницу.
Таким образом, добавление заголовка переадресации к этому приводит к запутыванию всего процесса загрузки файла (поскольку заголовки собраны, сгенерированы в один заголовок и затем отправлены в браузер , вы можете попробовать это, установив несколько заголовков переадресации IIRC)
Запустите файл PHP, который содержит загрузку CSV, используя:
<a onclick="popoutWin(\'csvexport.php\')" >Download CSV File</a>
или
<input name="newThread" type="button" value="Download CSV File"
onclick="popoutWin(\'csvexport.php\')" />
, где функция JavaScript popoutWin
-
/*
* Popout window that self closes for use with downloads
*/
function popoutWin(link){
var popwin = window.open(link);
window.setTimeout(function(){
popwin.close();
}, 500);
}
Это откроет окно, чтобы отобразить приглашение загрузки CSV, а затем сразу же закрыть окно, оставив только приглашение.
Я нашел одно обходное решение для этого, которое зависит от javascript, поэтому он не совсем безопасен, но для незащищенных критических сайтов он работает.
У вас есть форма с кнопкой под названием «скачать» с набором действий, указывающим на сценарий загрузки, а затем с помощью javascript поместите что-то в обработчик onsubmit, который удаляет кнопку загрузки и заменяет обмен сообщениями на экране , Загрузка должна произойти, и экран изменится. Очевидно, что если есть проблема с сценарием загрузки, все равно выглядит, что загрузка прошла успешно, даже если она не срабатывает, но это лучшее, что у меня есть сейчас.
Вот ответ: Это работа! Вам нужны три разные части кода: HTML
<a id="download_btn" class="btn btn-primary" href="?file=filename&download=1">Download<&/a>
JQuery
$('#download_btn').click(function(){
window.location.href = '<?=base_url()?>/?file=<?=$file;?>&download=1';
}).focusout (function(){
window.location.href = '<?=base_url()?>';
return false;
});
PHP
if(isset($_GET['download']) && isset($_GET['file'])){
$zip_path = 'path_to/'.$_GET['file'].'.zip';
if(file_exists($zip_path)){
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zip_path).'"');
header('Content-Length: ' . filesize($zip_path));
header('Location: '.$zip_path);
}
}
Имейте в виду, однако, автоматическое инициирование загружаемых файлов для пользователей IE вызовет вкладку предупреждений безопасности. Все три метода, описанные daremon, покажут это предупреждение. Вы просто не можете обойти это. Вам будет лучше, если вы предоставите реальные ссылки.
<?php
function force_file_download($filepath, $filename = ''){
if($filename == ''){
$filename = basename($filepath);
}
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . $filename . "\"");
readfile($filepath); // do the double-download-dance (dirty but worky)
}
force_file_download('download.txt');
?>
<script type="text/javascript">
location = 'page2.php'
</script>
Вот решение, использующее javascript.
очень легко сделать в случае, если это действительно необходимо.
Но вам нужно немного поработать в JavaScript и кукисах:
в PHP вы должны добавить настройку cookie
header('Set-Cookie: fileLoading=true');
, а затем на странице, где вы вызываете загрузку, вы должны отслеживать с помощью JS (например, один раз в секунду), если есть подходящий файл cookie (используется плагин jQuery cookie здесь:
setInterval(function(){
if ($.cookie("fileLoading")) {
// clean the cookie for future downoads
$.removeCookie("fileLoading");
//redirect
location.href = "/newpage";
}
},1000);
Теперь, если файл начинает загружаться, JS распознает его и перенаправляет на страницу, необходимую после удаления файла cookie.
Конечно, вы можете скажите, что вам нужен браузер, чтобы принимать файлы cookie, JavaScript и т. д., но он работает.
Вы можете попробовать перенаправить URL-адрес и параметр, представляющий содержимое файла. И в перенаправлении вы можете выводить содержимое файла для загрузки.
Это довольно старая проблема, но вот как я ее достиг через JS.
// Capture the "click" event of the link.
var link = document.getElementById("the-link");
link.addEventListener("click", function(evt) {
// Stop the link from doing what it would normally do.
evt.preventDefault();
// Open the file download in a new window. (It should just
// show a normal file dialog)
window.open(this.href, "_blank");
// Then redirect the page you are on to whatever page you
// want shown once the download has been triggered.
window.location = "/thank_you.html";
}, true);