将 csv 下载到服务器文件路径

Posted

技术标签:

【中文标题】将 csv 下载到服务器文件路径【英文标题】:Downloading csv to server file path 【发布时间】:2021-11-20 22:19:22 【问题描述】:

我在 Windows 服务器上托管 Flask 应用程序。在 Flask 应用程序中,用户可以过滤数据表。该数据表是通过将 SQL 查询的结果映射到 Flask 端点来创建的,并使用 Jquery Datatables 库中的 Ajax 请求显示该表。

用户可以过滤数据表,然后单击“导出数据”按钮。单击此按钮会将过滤后的数据表导出到位于用户下载文件夹中的 csv。

  buttons: [
               
                    extend: 'excelhtml5',
                    title: 'Data',
                    text: 'Export Data',
                ,
            ]

我不希望将此 csv 下载到用户的下载文件夹中。我希望将此 csv 下载到服务器...例如下载到像“\server_name\downloads”这样的文件路径。

我到处寻找,但我不知道该怎么做。任何指导将不胜感激...

【问题讨论】:

我认为您可能需要找到不同的方法。 DataTables 导出函数都在浏览器中运行(与核心 DataTables 库本身相同)。 DataTables 导出功能不在服务器上运行,或者能够将导出的 CSV/XLS/PDF 文件发送到服务器。该问题被标记为 Flask 问题,因此也许您可以查看 Python 库以生成 CSV 文件。 【参考方案1】:

如果我理解您的问题,这应该是解决方案(这是一个小解决方法)。当用户点击 CSV 按钮而不是下载它时,它将通过 AJAX 发送到后端函数,该函数将解释发送的数据(在本例中为 CSV 文件)并将其保存在服务器上的某个位置。

buttons: [
        extend: 'excelHtml5',
        title: 'Data',
        text: 'Export Data',
        action: function (e, dt, node, config) 

            //Variable where store the csv file
            let content = "";
            //Cycle all column header
            $.each(dt.data()["context"][0]["aoColumns"], function (indexInArray, valueOfElement) 
                //Adding every single column header to content variable and append ";"
                content += valueOfElement['sTitle'] + ";";
            );
            //After the last column header, remove the last ";" and add carriage return
            content = content.slice(0, -1) + "\n";

            //Cycle all row inside the table
            $.each(dt.data(), function (indexInArray, valueOfElement) 
                //Join every single element of row with ";" and add carriage return
                content += valueOfElement.join(";") + "\n";
            );

            //Create the form that will store the CSV
            var formData = new FormData();
            formData.append('file', new Blob([content],  type: 'text/csv' , "file.csv"));

            $.ajax(
                type: "POST",
                url: "http://httpbin.org/post",//YOUR_BACKEND_METHOD_URL
                data: formData,
                processData: false,
                contentType: false,
                success: function (response) 
                    console.log(response);
                
            );
        
    
    ]

$(document).ready(function() 
  var table = $('#example').DataTable(
    "dom": 'Blrtip',
    buttons: [
      extend: 'excelHtml5',
      title: 'Data',
      text: 'Export Data',
      action: function(e, dt, node, config) 

        //Variable where store the csv file
        let content = "";
        //Cycle all column header
        $.each(dt.data()["context"][0]["aoColumns"], function(indexInArray, valueOfElement) 
          //Adding every single column header to content variable and append ";"
          content += valueOfElement['sTitle'] + ";";
        );
        //After the last column header, remove the last ";" and add carriage return
        content = content.slice(0, -1) + "\n";

        //Cycle all row inside the table
        $.each(dt.data(), function(indexInArray, valueOfElement) 
          //Join every single element of row with ";" and add carriage return
          content += valueOfElement.join(";") + "\n";
        );

        //Create the form that will store the CSV
        var formData = new FormData();
        formData.append('file', new Blob([content], 
          type: 'text/csv'
        , "file.csv"));

        $.ajax(
          type: "POST",
          url: "http://httpbin.org/post", //YOUR_BACKEND_METHOD_URL
          data: formData,
          processData: false,
          contentType: false,
          success: function(response) 
            console.log(response);
          
        );
      
    ]
  );
);
body 
  font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
  margin: 0;
  padding: 0;
  color: #333;
  background-color: #fff;
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/jq-3.6.0/jszip-2.5.0/dt-1.11.3/b-2.0.1/b-colvis-2.0.1/b-html5-2.0.1/b-print-2.0.1/datatables.min.css" />

  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/pdfmake.min.js"></script>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.36/vfs_fonts.js"></script>
  <script type="text/javascript" src="https://cdn.datatables.net/v/dt/jq-3.6.0/jszip-2.5.0/dt-1.11.3/b-2.0.1/b-colvis-2.0.1/b-html5-2.0.1/b-print-2.0.1/datatables.min.js"></script>

</head>

<body>
  <div class="container">
    <table id="example" class="display nowrap" >
      <thead>
        <tr>
          <th>Name</th>
          <th>Position</th>
          <th>Office</th>
          <th>Age</th>
          <th>Start date</th>
          <th>Salary</th>
        </tr>
      </thead>

      <tfoot>
        <tr>
          <th>Name</th>
          <th>Position</th>
          <th>Office</th>
          <th>Age</th>
          <th>Start date</th>
          <th>Salary</th>
        </tr>
      </tfoot>

      <tbody>
        <tr>
          <td>Tiger Nixon</td>
          <td>System Architect</td>
          <td>Edinburgh</td>
          <td>61</td>
          <td>2011/04/25</td>
          <td>$3,120</td>
        </tr>
        <tr>
          <td>Garrett Winters</td>
          <td>Director</td>
          <td>Edinburgh</td>
          <td>63</td>
          <td>2011/07/25</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Ashton Cox</td>
          <td>Technical Author</td>
          <td>San Francisco</td>
          <td>66</td>
          <td>2009/01/12</td>
          <td>$4,800</td>
        </tr>
        <tr>
          <td>Cedric Kelly</td>
          <td>Javascript Developer</td>
          <td>Edinburgh</td>
          <td>22</td>
          <td>2012/03/29</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Jenna Elliott</td>
          <td>Financial Controller</td>
          <td>Edinburgh</td>
          <td>33</td>
          <td>2008/11/28</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Brielle Williamson</td>
          <td>Integration Specialist</td>
          <td>New York</td>
          <td>61</td>
          <td>2012/12/02</td>
          <td>$4,525</td>
        </tr>
        <tr>
          <td>Herrod Chandler</td>
          <td>Sales Assistant</td>
          <td>San Francisco</td>
          <td>59</td>
          <td>2012/08/06</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Rhona Davidson</td>
          <td>Integration Specialist</td>
          <td>Edinburgh</td>
          <td>55</td>
          <td>2010/10/14</td>
          <td>$6,730</td>
        </tr>
        <tr>
          <td>Colleen Hurst</td>
          <td>Javascript Developer</td>
          <td>San Francisco</td>
          <td>39</td>
          <td>2009/09/15</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Sonya Frost</td>
          <td>Software Engineer</td>
          <td>Edinburgh</td>
          <td>23</td>
          <td>2008/12/13</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Jena Gaines</td>
          <td>System Architect</td>
          <td>London</td>
          <td>30</td>
          <td>2008/12/19</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Quinn Flynn</td>
          <td>Financial Controller</td>
          <td>Edinburgh</td>
          <td>22</td>
          <td>2013/03/03</td>
          <td>$4,200</td>
        </tr>
        <tr>
          <td>Charde Marshall</td>
          <td>Regional Director</td>
          <td>San Francisco</td>
          <td>36</td>
          <td>2008/10/16</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Haley Kennedy</td>
          <td>Senior Marketing Designer</td>
          <td>London</td>
          <td>43</td>
          <td>2012/12/18</td>
          <td>$4,800</td>
        </tr>
        <tr>
          <td>Tatyana Fitzpatrick</td>
          <td>Regional Director</td>
          <td>London</td>
          <td>19</td>
          <td>2010/03/17</td>
          <td>$2,875</td>
        </tr>
        <tr>
          <td>Michael Silva</td>
          <td>Senior Marketing Designer</td>
          <td>London</td>
          <td>66</td>
          <td>2012/11/27</td>
          <td>$3,750</td>
        </tr>
        <tr>
          <td>Paul Byrd</td>
          <td>Javascript Developer</td>
          <td>New York</td>
          <td>64</td>
          <td>2010/06/09</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Gloria Little</td>
          <td>Systems Administrator</td>
          <td>New York</td>
          <td>59</td>
          <td>2009/04/10</td>
          <td>$3,120</td>
        </tr>
        <tr>
          <td>Bradley Greer</td>
          <td>Software Engineer</td>
          <td>London</td>
          <td>41</td>
          <td>2012/10/13</td>
          <td>$3,120</td>
        </tr>
        <tr>
          <td>Dai Rios</td>
          <td>System Architect</td>
          <td>Edinburgh</td>
          <td>35</td>
          <td>2012/09/26</td>
          <td>$4,200</td>
        </tr>
        <tr>
          <td>Jenette Caldwell</td>
          <td>Financial Controller</td>
          <td>New York</td>
          <td>30</td>
          <td>2011/09/03</td>
          <td>$4,965</td>
        </tr>
        <tr>
          <td>Yuri Berry</td>
          <td>System Architect</td>
          <td>New York</td>
          <td>40</td>
          <td>2009/06/25</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Caesar Vance</td>
          <td>Technical Author</td>
          <td>New York</td>
          <td>21</td>
          <td>2011/12/12</td>
          <td>$4,965</td>
        </tr>
        <tr>
          <td>Doris Wilder</td>
          <td>Sales Assistant</td>
          <td>Edinburgh</td>
          <td>23</td>
          <td>2010/09/20</td>
          <td>$4,965</td>
        </tr>
        <tr>
          <td>Angelica Ramos</td>
          <td>System Architect</td>
          <td>London</td>
          <td>36</td>
          <td>2009/10/09</td>
          <td>$2,875</td>
        </tr>
        <tr>
          <td>Gavin Joyce</td>
          <td>Developer</td>
          <td>Edinburgh</td>
          <td>42</td>
          <td>2010/12/22</td>
          <td>$4,525</td>
        </tr>
        <tr>
          <td>Jennifer Chang</td>
          <td>Regional Director</td>
          <td>London</td>
          <td>28</td>
          <td>2010/11/14</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Brenden Wagner</td>
          <td>Software Engineer</td>
          <td>San Francisco</td>
          <td>18</td>
          <td>2011/06/07</td>
          <td>$3,750</td>
        </tr>
        <tr>
          <td>Ebony Grimes</td>
          <td>Software Engineer</td>
          <td>San Francisco</td>
          <td>48</td>
          <td>2010/03/11</td>
          <td>$2,875</td>
        </tr>
        <tr>
          <td>Russell Chavez</td>
          <td>Director</td>
          <td>Edinburgh</td>
          <td>20</td>
          <td>2011/08/14</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Michelle House</td>
          <td>Integration Specialist</td>
          <td>Edinburgh</td>
          <td>37</td>
          <td>2011/06/02</td>
          <td>$3,750</td>
        </tr>
        <tr>
          <td>Suki Burks</td>
          <td>Developer</td>
          <td>London</td>
          <td>53</td>
          <td>2009/10/22</td>
          <td>$2,875</td>
        </tr>
        <tr>
          <td>Prescott Bartlett</td>
          <td>Technical Author</td>
          <td>London</td>
          <td>27</td>
          <td>2011/05/07</td>
          <td>$6,730</td>
        </tr>
        <tr>
          <td>Gavin Cortez</td>
          <td>Technical Author</td>
          <td>San Francisco</td>
          <td>22</td>
          <td>2008/10/26</td>
          <td>$6,730</td>
        </tr>
        <tr>
          <td>Martena Mccray</td>
          <td>Integration Specialist</td>
          <td>Edinburgh</td>
          <td>46</td>
          <td>2011/03/09</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Unity Butler</td>
          <td>Senior Marketing Designer</td>
          <td>San Francisco</td>
          <td>47</td>
          <td>2009/12/09</td>
          <td>$3,750</td>
        </tr>
        <tr>
          <td>Howard Hatfield</td>
          <td>Financial Controller</td>
          <td>San Francisco</td>
          <td>51</td>
          <td>2008/12/16</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Hope Fuentes</td>
          <td>Financial Controller</td>
          <td>San Francisco</td>
          <td>41</td>
          <td>2010/02/12</td>
          <td>$4,200</td>
        </tr>
        <tr>
          <td>Vivian Harrell</td>
          <td>System Architect</td>
          <td>San Francisco</td>
          <td>62</td>
          <td>2009/02/14</td>
          <td>$4,965</td>
        </tr>
        <tr>
          <td>Timothy Mooney</td>
          <td>Financial Controller</td>
          <td>London</td>
          <td>37</td>
          <td>2008/12/11</td>
          <td>$4,200</td>
        </tr>
        <tr>
          <td>Jackson Bradshaw</td>
          <td>Director</td>
          <td>New York</td>
          <td>65</td>
          <td>2008/09/26</td>
          <td>$5,000</td>
        </tr>
        <tr>
          <td>Miriam Weiss</td>
          <td>Support Engineer</td>
          <td>Edinburgh</td>
          <td>64</td>
          <td>2011/02/03</td>
          <td>$4,965</td>
        </tr>
        <tr>
          <td>Bruno Nash</td>
          <td>Software Engineer</td>
          <td>London</td>
          <td>38</td>
          <td>2011/05/03</td>
          <td>$4,200</td>
        </tr>
        <tr>
          <td>Odessa Jackson</td>
          <td>Support Engineer</td>
          <td>Edinburgh</td>
          <td>37</td>
          <td>2009/08/19</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Thor Walton</td>
          <td>Developer</td>
          <td>New York</td>
          <td>61</td>
          <td>2013/08/11</td>
          <td>$3,600</td>
        </tr>
        <tr>
          <td>Finn Camacho</td>
          <td>Support Engineer</td>
          <td>San Francisco</td>
          <td>47</td>
          <td>2009/07/07</td>
          <td>$4,800</td>
        </tr>
        <tr>
          <td>Elton Baldwin</td>
          <td>Data Coordinator</td>
          <td>Edinburgh</td>
          <td>64</td>
          <td>2012/04/09</td>
          <td>$6,730</td>
        </tr>
        <tr>
          <td>Zenaida Frank</td>
          <td>Software Engineer</td>
          <td>New York</td>
          <td>63</td>
          <td>2010/01/04</td>
          <td>$4,800</td>
        </tr>
        <tr>
          <td>Zorita Serrano</td>
          <td>Software Engineer</td>
          <td>San Francisco</td>
          <td>56</td>
          <td>2012/06/01</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Jennifer Acosta</td>
          <td>Javascript Developer</td>
          <td>Edinburgh</td>
          <td>43</td>
          <td>2013/02/01</td>
          <td>$2,875</td>
        </tr>
        <tr>
          <td>Cara Stevens</td>
          <td>Sales Assistant</td>
          <td>New York</td>
          <td>46</td>
          <td>2011/12/06</td>
          <td>$4,800</td>
        </tr>
        <tr>
          <td>Hermione Butler</td>
          <td>Director</td>
          <td>London</td>
          <td>47</td>
          <td>2011/03/21</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Lael Greer</td>
          <td>Systems Administrator</td>
          <td>London</td>
          <td>21</td>
          <td>2009/02/27</td>
          <td>$3,120</td>
        </tr>
        <tr>
          <td>Jonas Alexander</td>
          <td>Developer</td>
          <td>San Francisco</td>
          <td>30</td>
          <td>2010/07/14</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Shad Decker</td>
          <td>Regional Director</td>
          <td>Edinburgh</td>
          <td>51</td>
          <td>2008/11/13</td>
          <td>$5,300</td>
        </tr>
        <tr>
          <td>Michael Bruce</td>
          <td>Javascript Developer</td>
          <td>Edinburgh</td>
          <td>29</td>
          <td>2011/06/27</td>
          <td>$4,080</td>
        </tr>
        <tr>
          <td>Donna Snider</td>
          <td>System Architect</td>
          <td>New York</td>
          <td>27</td>
          <td>2011/01/25</td>
          <td>$3,120</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>

</html>

【讨论】:

以上是关于将 csv 下载到服务器文件路径的主要内容,如果未能解决你的问题,请参考以下文章

下载 CSV 文件时路径错误中的非法字符

ABAP,解析FTP服务器上的CSV文件

Jmeter远程服务模式运行时引用csv文件的路径配置

Jmeter远程服务模式运行时引用csv文件的路径配置

将多个 Excel 文件保存到具有唯一文件名的特定路径

设置下载路径