Strict Standards: Declaration of PluginAceadminpanel_ModuleLang::Get() should be compatible with ModuleLang::Get($sName, $aReplace = Array, $bDelete = true) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/lang/Lang.class.php on line 21 Strict Standards: Declaration of PluginAceadminpanel_ModuleViewer::_SortBlocks() should be compatible with ModuleViewer::_SortBlocks($a, $b) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/viewer/Viewer.class.php on line 24 jquery / Поиск по тегам / BPOU - Bitrix blog

Отправить файл на скачивание

Что бы отправить файл на скачивание, нужно создать промежуточный файл, который будет выдавать заголовок «Атача». Джаваскрипт этого сделать не может тоже. Что же делать?

У битрикса есть такой стандартный файл, можно все делать через него, ссылку можно сделать так
"/bitrix/admin/fileman_file_download.php?path=".urlencode($filepath)
правда нужно быть залогиненым и с правами на файлманагер, потому мы сделаем свой файл по мотивам fileman_file_download.php.
назовем его getfile.php и положим в корень
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("fileman");

$strWarning = "";
$site = CFileMan::__CheckSite($site);
$DOC_ROOT = CSite::GetSiteDocRoot($site);

$io = CBXVirtualIo::GetInstance();
$path = $io->CombinePath("/", $path);

if (preg_match("/bitrix/i",$path))
	die("its wrong");

$arPath = Array($site, $path);
$arParsedPath = CFileMan::ParsePath(Array($site, htmlspecialcharsex($path)));
$abs_path = $DOC_ROOT.$path;

if(!$io->FileExists($abs_path))
	$strWarning = GetMessage("FILEMAN_FILENOT_FOUND")." ";

if(strlen($strWarning) <= 0)
{
	$flTmp = $io->GetFile($abs_path);
	$fsize = $flTmp->GetFileSize();
	header("Content-Type: application/force-download; name=\"".$io->GetPhysicalName($arParsedPath["LAST"])."\"");
	header("Content-Transfer-Encoding: binary");
	header("Content-Length: ".$fsize);
	header("Content-Disposition: attachment; filename=\"".$io->GetPhysicalName($arParsedPath["LAST"])."\"");
	header("Expires: 0");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
	$flTmp->ReadFile();
	die();
}

$APPLICATION->SetTitle(GetMessage("FILEMAN_FILEDOWNLOAD")." \"".$arParsedPath["LAST"]."\"");
?>
<font class="text"><?=$arParsedPath["HTML"]?></font>

<?
ShowError($strWarning);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); 
?>


Теперь можно сделать скриптовую заглушку и даже ссылки не менять
<script type="text/javascript">
	$("a[href$=.pdf]").click(function(){
		var url = $(this).attr("href");
		window.open("/getfile.php?path="+encodeURIComponent(url));
		return false;
	});
</script>
Код выше, все файлы pdf отправляет на диалог для скачивания :)