2014-10-27 65 views
1

是否可以使用WordPress Ajax下載文件。我有這個功能來下載附件。在WordPress中使用ajax下載文件

function download_attachment() 
{ 
    $file_path = $_POST['filename']; 
    $file_mime = $_POST['mime']; 
    $data['file_path'] = file_exists($file_path); 

    try{ 
     header('Pragma: public'); // required 
     header('Expires: 0');  // no cache 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_path)).' GMT'); 
     header('Cache-Control: private',false); 
     header('Content-Type: '.$file_mime); 
     header('Content-Disposition: attachment; filename="'.basename($file_path).'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Content-Length: '.filesize($file_path)); // provide file size 
     header('Connection: close'); 
     set_time_limit(0); 
     @readfile("$file_path") or die("File not found."); 

    }catch(Exception $e) 
    { 
     $data['error'] = $e->getMessage() ." @ ". $e->getFile() .' - '. $e->getLine(); 
    } 
    } 
    echo json_encode($data); 
    die(); 
} 

它被鉤到WordPress主要功能與此功能:

add_action('wp_ajax_download_attachment','download_attachment'); 

而jQuery代碼是這樣的:

var data = { 
     'function': 'download_attachment', 
     'filename': file_path, 
     'mime': mime 
    }; 

    jQuery.ajax({ 
     url: ajaxurl, 
     type: "POST", 
     data: data, 
     success: function(return_data, textStatus, jqXHR) { 
      parsedData = kalimahJS.parseJSON(return_data); 
      window.open(parsedData.url); 
     } 
    }) 

最終的結果是0顯示在屏幕上。有沒有另一種方法來做到這一點?

+0

儘量去除抑制在這裏'@readfile (「$ file_path」)或死(「File not found。」);'也許文件未找到,但是你隱藏了錯誤。如果你這樣做會怎樣? – vaso123 2014-10-27 09:25:32

+0

我嘗試過但沒有任何反應。該文件確實存在,我已經放置了一個絕對路徑並沒有發生任何事情。 – 2014-10-27 09:32:49

+0

嘗試2件事。第一,嘗試'var_dump($ data);'它包含什麼?因爲看起來'json_encode'失敗。第2位。你也可以嘗試一下,如果你直接調用php,會發生什麼。直接在ajax文件中設置'$ file_path'和'$ file_mime',然後調用該文件。如果沒關係,那麼數據是不正確的,你通過'$ _POST' – vaso123 2014-10-27 10:49:38

回答

0

嘗試添加以下代碼也

add_action('wp_ajax_nopriv_download_attachment', 'download_attachment'); 
+1

我加入並且我收到了相同的結果。 – 2014-10-27 09:44:19

+0

無法下載數據使用Ajax。 – huykon225 2017-12-12 02:31:11