在有人说这是重复的之前,我不认为这是因为我已经看过类似的问题,但它们并没有帮助我!

我正在用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(...)并使用tryfinally语句,如下所示:
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')

10-06 15:49