我需要从wtforms获取二进制文件并将其作为bytea存储在postgresql中。而且我不需要将其永久存储为文件。根据我对Flask offical doc的理解,我可以通过request.files。[' myfile']。filename或secure_filename(f.filename)访问文件名。但是,它们都给我一个错误:IOError:[Errno 2]没有这样的文件或目录:u' myuploadpdf.pdf'
f = request.files.['myfile']:
if f and allowed_file(f.filename):
#filename = secure_filename(f.filename)
data = open(f.filename, 'rb').read()
#data = open(filename , 'rb').read()
binary = psycopg2.Binary(data)
答案 0 :(得分:3)
open()
需要文件的路径名。由于文件尚未保存到磁盘,因此不存在此类路径。 :)
您实际想要做的是直接致电f.read()
。阅读传入的文件涵盖here。
另外,如果您使用磁盘上的任何内容,请务必使用secure_filename()
。不要打开任何目录遍历攻击线。
答案 1 :(得分:2)
request.files中的对象是FileStorage对象,它们与python中的普通文件对象具有相同的方法。因此,要将文件的内容作为二进制文件,请尝试执行以下操作:
data = request.files['myfile'].read()