Zacznę od tego że używam frameworka CI (który, pozwala ładować inne widoki tylko z metodą $this->load->view();, wied iframe mi nie wychodzi).
Ja chciałem zrobić prostą rzecz. Mam umieszczony plik na swoim serwerze w katalogu data. Chcę go pobrać bez odswiezania strony. Pomysł był taki żeby zrobić przycisk po ktorego kliknięciu przekazuje adres do ukrytej ramki w której wrzucę headery odpowiedzialne za pobranie pliku:
(widok pierwszy)
Kod
<input class="przycisk" type="submit" name="download" onClick="java script:tryToDownload('pobierz_error_sheet');" value="Pobierz arkusz zawierający błędy" title="Download" />
<script language="javascript">
function tryToDownload(url)
{
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
alert(url);
}
window.onload = setTimeout('tryToDownload("fileloader.php?fileName=test.rar")', 10*1000);
</script>
<iframe id="myIFrm" src="" style="visibility:hidden">
</iframe>
<script language="javascript">
function tryToDownload(url)
{
oIFrm = document.getElementById('myIFrm');
oIFrm.src = url;
alert(url);
}
window.onload = setTimeout('tryToDownload("fileloader.php?fileName=test.rar")', 10*1000);
</script>
<iframe id="myIFrm" src="" style="visibility:hidden">
</iframe>
(zawartość ramki)
Kod
<?php
$filename = 'CMD_with_error_sheet.xls';
$dir = 'C:/xampp/htdocs/cmdb/main/data/';
$file_extension = strtolower(substr(strrchr($filename,"."),1));
//First, see if the file exists
if( (!is_file($dir.$filename)) || (!file_exists($dir.$filename)) )
{
echo "Błąd: Nieznaleziono pliku. ".$dir.$filename;
}
else
{
//This will set the Content-Type to the appropriate setting for the file
switch( $file_extension )
{
case "pdf": $ctype="application/pdf"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default: $ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($dir.$filename));
readfile($dir.$filename);
}
?>
$filename = 'CMD_with_error_sheet.xls';
$dir = 'C:/xampp/htdocs/cmdb/main/data/';
$file_extension = strtolower(substr(strrchr($filename,"."),1));
//First, see if the file exists
if( (!is_file($dir.$filename)) || (!file_exists($dir.$filename)) )
{
echo "Błąd: Nieznaleziono pliku. ".$dir.$filename;
}
else
{
//This will set the Content-Type to the appropriate setting for the file
switch( $file_extension )
{
case "pdf": $ctype="application/pdf"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default: $ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($dir.$filename));
readfile($dir.$filename);
}
?>
ale w CI chyba nie ma takiej opcji..
Jest ktoś w stanie mi pomóc. Niestety nie znam się na ajaxie


