而是在你的頁面,您可以使用錨標記和php力下載進行下載PDF製作一個更Ajax調用的
HTML
<a href="www.example.com/download_file.php?file_source=example.pdf">Download pdf here</a>
PHP
<?php
$fullPath = $_GET['fileSource'];
if($fullPath) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
header("Content-type: application/pdf"); // add here more headers for diff. extensions
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
}
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
readfile($fullPath);
exit;
}
?>
我檢查了文件的大小,因爲如果從CDN CloudFront的加載PDF,你那倒得到的文件大小,這迫使該文件中0KB下載,爲了避免這種情況我與這個條件
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
檢查
我也在努力解決這個問題,上面的代碼爲我工作,我希望它可以幫助
Darin:您如何看待使用AJAX GET請求在服務器上生成文件?這使我能夠捕獲失敗回調中的文件生成過程中發生在服務器上的任何錯誤,並將其顯示給用戶。如果成功,我然後在ajax成功回調中傳遞文件名並執行'window.location = server \ folder \ filename'。我正在使用ASP.NET Web API。 –
OP專門詢問ajax。這是對帶寬的浪費。 – CodeWarrior
@OmarPadilla,您無法使用AJAX將文件下載到客戶端。但即使這是可能的,如果您使用直接鏈接下載文件,也會浪費完全相同的帶寬量。原因很簡單,就是在這兩種情況下,您都是在返回相同文件的服務器上調用相同的端點。不要被愚蠢地認爲,如果你不使用AJAX,當前頁面將*重載*。沒有其他請求,而不是控制器操作的其他請求將流式傳輸文件。 –