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

用户

在我的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,而不使用临时文件。在


已被浏览了1579次
更新日期: 2020-10-26 06:27:31
2 个回答
fefe Tyson

我真的希望你有足够的理由在数据库中存储.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

评论 - 2020年9月11日 20:57
fefe Tyson

是的,我知道答案了!。我不需要临时文件。当我将从数据库读取的数据与响应一起传递时,它就起作用了。我误解了,除非我们有一个存储的文件,否则它不会工作。但现在我明白了,我们必须传递带有响应的二进制数据。由于数据库保存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
评论 - 2020年9月11日 20:57

最新Python问答

推荐Python问答