在我的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传输到模板。
c = db.cursor()
c.execute("SELECT DOC FROM REPORTS WHERE id=%s",(id,))
file = c.fetchone()[0]
c.close()
f=tempfile.NamedTemporaryFile(dir='/tmp/',suffix='.pdf')
f.write(filename)
f.seek(0)
response = HttpResponse(f, content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="report.pdf"'
return response
但实际上,我想直接从数据库中显示pdf,而不使用临时文件。
答案 0 :(得分:2)
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
答案 1 :(得分:0)
我真的希望你有足够的理由将.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