在有人说这是重复的之前,我不认为这是因为我已经看过类似的问题,但它们并没有帮助我!
我正在用python创建Flask服务器,我需要能够显示pdf的网址。
我尝试使用以下代码:
@app.route('/pdf')
def pdfStuff():
with open('pdffile.pdf', 'rb') as static_file:
return send_file(static_file, attachment_filename='pdffile.pdf')
这应该可以做到,所以当我转到
/pdf
时,它将显示pdf文件pdffile.pdf
。但是,这不起作用,因为在运行代码时出现此错误:
ValueError: I/O operation on closed file
这是怎么回事?我的return语句在with语句内,因此文件不应该打开吗?
我试图使用普通的
static_file = open(...)
并使用try
和finally
语句,如下所示:static_file = open('pdffile.pdf','rb')
try:
return send_file(static_file, attachment_filename='pdffile.pdf')
finally:
static_file.close()
上面的代码也会发生同样的错误,我也不知道为什么。有人知道我可能做错了吗?
抱歉,如果我很愚蠢,并且有一些简单的事情我弄错了!
提前非常感谢您!
最佳答案
使用send_file
和文件名,它将按您期望的方式打开,使用和关闭它。
@app.route('/pdf')
def pdfStuff():
return send_file('pdffile.pdf')