从服务器下载CSV文件到本地目录


Download CSV file from server to local direcory

我编写了一个脚本,在其中创建并保存一个CSV文件在我的服务器的目录中。CSV文件包含来自查询的属性。整个过程是使用Jquery和Ajax在单击按钮时执行的。

我现在想做的是能够在本地保存生成的CSV。我发现了类似的问题,但我还没有找到一个关于如何创建一个对话框的答案,这将提示客户端指定保存文件的位置。

这是我Jquery代码的一部分:

var nodeId = 'something';
var ajaxurl = 'requestsII/exportNodeData.php', // script to run
        data =  {nodeId:nodeId}; // data to pass
        $.post(ajaxurl, data, function (response) {     
                //alert(response);
        }); 
这是我的PHP脚本:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");  // EDITED
if ($db) {
    $stmt = $db->prepare('SELECT kodpop AS "ΚΩΔΙΚΟΣ ΚΟΜΒΟΥ",itemcode AS "ΚΩΔΙΚΟΣ ΕΞΟΠΛΙΣΜΟΥ",temaxia AS "ΤΕΜΑΧΙΑ",status AS "STATUS" FROM bom WHERE type IN (:typeI, :typeII) AND kodpop = :nodeId');
    $stmt->execute(array('typeI' =>$typeI,'typeII' => $typeII,'nodeId' => $nodeId));
    #$results=$stmt->fetchAll(PDO::FETCH_OBJ);
    #$json=json_encode($results);
    #echo($json);
    $filename = '/var/www/dkar/ruralBroadband/ruralApp/rural/csvExports/'.$nodeId.'.csv';
    $data = fopen($filename, 'w');
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        fputcsv($data, $row);
    }
    fclose($data);
}
echo($data); // EDITED

问题是我如何在本地下载我在PHP脚本中创建的CSV文件?

试试这个代码

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "record1,record2,record3'n";

Edit:

Try This code

if ($db) 
{
    $stmt = $db->prepare('SELECT kodpop AS "ΚΩΔΙΚΟΣ ΚΟΜΒΟΥ",itemcode AS     "ΚΩΔΙΚΟΣ ΕΞΟΠΛΙΣΜΟΥ",temaxia AS "ΤΕΜΑΧΙΑ",status AS "STATUS" FROM bom WHERE type  IN (:typeI, :typeII) AND kodpop = :nodeId');
$stmt->execute(array('typeI' =>$typeI,'typeII' => $typeII,'nodeId' => $nodeId));
#$results=$stmt->fetchAll(PDO::FETCH_OBJ);
#$json=json_encode($results);
#echo($json);
$filename = '/var/www/dkar/ruralBroadband/ruralApp/rural/csvExports/'.$nodeId.'.csv';

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=".$filename);  

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print_r($row);
}
}

毕竟我没有使用上面的方法,我这样做了,效果很好,而且更直接:

var ajaxurl = 'exportNodeData.php', // script to run
                data =  {nodeId:nodeId}; // data to pass
                $.post(ajaxurl, data, function (response) {     
                    document.location.href = 'https://www.ruralauditor.gr/csvExports/'+nodeId+'.zip';
                }); 

这是ajax请求,我执行它是为了创建CSV文件(它也是压缩的)。然后使用这一行:

document.location.href = 'https://www.ruralauditor.gr/csvExports/'+nodeId+'.zip';