无法从secure_filename(f.filename)读取文件

时间:2015-05-14 14:16:28

标签: python flask

我需要从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)

2 个答案:

答案 0 :(得分:3)

open()需要文件的路径名。由于文件尚未保存到磁盘,因此不存在此类路径。 :)

您实际想要做的是直接致电f.read()。阅读传入的文件涵盖here

另外,如果您使用磁盘上的任何内容,请务必使用secure_filename()。不要打开任何目录遍历攻击线。

答案 1 :(得分:2)

request.files中的对象是FileStorage对象,它们与python中的普通文件对象具有相同的方法。因此,要将文件的内容作为二进制文件,请尝试执行以下操作:

data = request.files['myfile'].read()