2014-10-04 3 views
2

У меня есть папка в корневом каталоге с именем files. Эта папка содержит файлы в диапазоне от 1 Kb-1 GB.Загрузка файла с сервера на компьютер клиента

Мне нужен скрипт php, который может просто загрузить файл асинхронно с помощью AJAX.

Этот код инициирует скачать сценарии, когда файл щелкнул:

Jquery

$('.download').click(function(){ 
    var src =$(this).attr('src'); 
    $.post('download.php',{ 
     src : src //contains name of file 
    },function(data){ 
     alert('Downloaded!'); 
    }); 
}); 

PHP

<?php 
    $path = 'files/'.$_POST['src']; 
    //here the download script must go! 
?> 

Какой бы быть лучший, самый быстрый и безопасный способ скачать файл?

+0

"Я хочу, чтобы PHP-скрипт, который можно просто скачать файл асинхронно с помощью AJAX." - Зачем? Что вам нужно сделать, это не может быть сделано, просто позволяя серверу управлять им? Зачем вам нужно привлекать Ajax? – Quentin

ответ

3
<?php 
/** 
* download.php 
*/ 

if (!empty($_GET['file'])) { 
    // Security, down allow to pass ANY PATH in your server 
    $fileName = basename($_GET['file']); 
} else { 
    return; 
} 

$filePath = '???/files/' . $fileName; 
if (!file_exists($filePath)) { 
    return; 
} 

header("Content-disposition: attachment; filename=" . $fileName); 
header("Content-type: application/pdf"); 
readfile($filePath); 

И на самом деле запрос AJAX не требуется, при использовании Content-disposition: attachment:

<a href="download.php?file=file1.pdf">File1</a> 
+1

Что делать, если я не знаю 'content-type'? –

+1

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

+0

Вы не можете использовать Content-Type. PHP по умолчанию заявляет, что это HTML-документ, если вы не переопределите это. – Quentin

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