【问题标题】:Creating download link for user generated csv file on App Engine在 App Engine 上为用户生成的 csv 文件创建下载链接
【发布时间】:2013-07-10 21:24:16
【问题描述】:

我在尝试创建下载链接时遇到问题,该链接将 (1) 原位生成 CSV 文件并 (2) 自动开始下载而不被重定向到另一个页面(即 AJAX 请求)。

发生的情况如下:我没有看到任何 JavaScript 错误,并且处理程序 CSVDownload 也可以毫无问题地执行。但是,下载永远不会开始。出于某种原因,如果我只是输入 URL (..website../csvdownload),那么它会使用相同的处理程序创建文件。知道为什么会这样吗?

任何帮助将不胜感激!

HTML

<button id="mainReportDownload" type="button">
   Download Report
</button>

AJAX 请求

$('#mainReportDownload').on('click', function() {
  $.ajax({
    type: 'GET',
    url: "/csvdownload",
    beforeSend: function() {
      notification('Creating report..','info',false)
    }
  });
});

Python

def List2CSV(data):
  csv = ""
  for row in data:
    for item in row:
      csv = csv + item + ','
    csv = csv[:-1] + '\n'
  csv = csv[:-1]
  return csv

class CSVDownload(webapp2.RequestHandler):
  def get(self):

    conn = rdbms.connect(instance=_INSTANCE_NAME, database='test')
    cursor = conn.cursor()

    cursor.execute('SELECT email FROM Test LIMIT 100')
    testvalues = [[item for item in row] for row in cursor.fetchall()]
    csv = List2CSV(testvalues)

    self.response.headers['Content-Type'] = 'text/csv'
    self.response.headers['Content-Disposition'] = 'attachment; filename=report.csv'
    self.response.out.write(csv)
    conn.close()

【问题讨论】:

    标签: python google-app-engine download


    【解决方案1】:

    您有矛盾的要求。当浏览器导航到发送回“附件”内容处置的 URL 时,就会发生正常下载。但是您正在尝试使用 Ajax,它无法导航,因此没有完成下载。 Ajax 很高兴地阅读内容,但随后只是将其丢弃,因为您没有定义成功处理程序来告诉它如何处理它。当然,即使您确实定义了该处理程序,出于明显的安全原因,Javascript 也无法将文件保存到用户的计算机。

    【讨论】:

    • 谢谢!只是创建了一个 &lt;a href="/report.csv"&gt;Download&lt;/a&gt; 链接,完全跳过了 AJAX,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多