【发布时间】:2020-09-01 12:34:34
【问题描述】:
我最近开始学习烧瓶并创建了一个简单的网络应用程序,它可以根据用户输入随机生成 PDF 格式的儿童数学作业表。
PDF 会在浏览器中自动打开并且可以查看。但是当我尝试在 PC 和 Chrome iOS 上下载它时,我收到错误消息(Chrome PC:失败 - 网络错误/Chrome iOS:此时无法下载文件)。
您可以在这里试用:kidsmathsheets.com
我怀疑这与我生成和返回 PDF 文件的方式有关。仅供参考,我正在使用 ReportLab 生成 PDF。我的代码如下(托管在 pythonanywhere 上):
from reportlab.lib.pagesizes import A4, letter
from reportlab.pdfgen import canvas
from reportlab.platypus import Table
from flask import Flask, render_template, request, Response
import io
from werkzeug import FileWrapper
# Other code to take in input and generate data
filename=io.BytesIO()
if letter_size:
c = canvas.Canvas(filename, pagesize=letter)
else:
c = canvas.Canvas(filename, pagesize=A4)
pdf_all(c, p_set, answer=answers, letter=letter_size)
c.save()
filename.seek(0)
wrapped_file = FileWrapper(filename)
return Response(wrapped_file, mimetype="application/pdf", direct_passthrough=True)
else:
return render_template('index.html')
知道是什么导致了这个问题吗?非常感谢您的帮助!
【问题讨论】:
-
您是否尝试过使用
send_file? -
是的,我试过 send_file() 并得到相同的错误消息...
-
我相信这可能与 Chrome 安全设置有关:windowsreport.com/failed-network-error-download-chrome。我在 Firefox 中尝试了 PDF 下载,它可以工作,但在 Chrome(在 linux 上)中以同样的方式失败了
-
谢谢格伦。我有一台 Windows 机器,它在 Microsoft Edge 上也失败了。因此,我认为我提供 PDF 的方式存在问题,导致此类错误。通常如果可以显示PDF,下载它应该是直截了当的......
-
现在 Edge 不都是基于 Chrome 的吗?
标签: flask pythonanywhere