我如何以Django格式显示pdf,它以blob的形式存储在mysql数据库中?

2024-04-20 08:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的web应用程序中,用户可以上传一个pdf文件,该文件存储在mysql数据库中。该文件使用以下代码存储在数据库中。 注意:由于与安全相关的问题,文件保存在数据库中。在

    data=request.FILES['file'].read()
    fcursor = db.cursor()
    fcursor.execute("INSERT INTO REPORTS(DOC,id) VALUES(%s,%s)",(data,id))
    db.commit()
    fcursor.close()
    db.close()

用户可以查看此pdf。现在我在临时文件的帮助下将pdf转换为模板。在

^{pr2}$

但实际上,我想直接从数据库显示pdf,而不使用临时文件。在


Tags: 文件代码用户webid数据库应用程序close
2条回答

是的,我知道答案了!。我不需要临时文件。当我将从数据库读取的数据与响应一起传递时,它就起作用了。我误解了,除非我们有一个存储的文件,否则它不会工作。但现在我明白了,我们必须传递带有响应的二进制数据。由于数据库保存pdf的二进制格式,所以从数据库读取的数据和临时文件都是相同的。在

c = db.cursor()
c.execute("SELECT DOC FROM REPORTS WHERE id=%s",(id,))
file = c.fetchone()[0]
c.close()

response = HttpResponse(file, content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="report.pdf"'
return response

我真的希望你有足够的理由在数据库中存储.pdf文件。更好的做法是将上载的文档或图像存储在文件系统中,并将其文件路径或url保存到数据库中的文件。 你的问题类似于this one。问题可能出在从数据库读取pdf文件的方式上。要直接从数据库显示pdf,可以尝试使用converted_file = open(file_from_db,"rb")函数将blob文件作为二进制文件读取。你可以这样做: response = HttpResponse(converted_file, content_type='application/pdf') response['Content-Disposition'] = 'inline; filename="report.pdf"' return response

相关问题 更多 >