Мне нужно получить двоичный файл из wtforms и сохранить его как bytea в postgresql. И мне не нужно постоянно хранить его в виде файла. Из моего понимания Flask offical doc я получаю доступ к имени файла через файл request.files. ['Myfile']. Filename или secure_filename (f.filename). Тем не менее, оба они дают мне ошибку: IOError: [Errno 2] Нет такого файла или каталога: u'myuploadpdf.pdf»Не удается прочитать файл из secure_filename (f.filename)
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)
Файл будет сохранен в базе данных. Итак, вы говорите, что я должен хранить его на диске перед сохранением в базе данных, поскольку request.files ['myfile']. Read() не защищен. –
Нет, вы можете преобразовать его, а затем сохранить непосредственно в Postgres, как вы делали с помощью 'psycopg2.Binary (data)' и оператора ORM/insert по вашему выбору. Мой комментарий о 'secure_filename' применим только при сохранении на диске или чтении с диска. В отношении безопасности при обработке загружаемого пользователем контента это означало больше. 'FileStorage.read' по своей сути небезопасен, если вы не доверяете его контенту. ;) –
Спасибо, но мне все еще нужно прочитать файл в двоичном режиме: data = open (fn, 'rb'). Read(), чтобы вызвать psycopg2.Binary (data), что приводит меня к [этому вопросу] (http://stackoverflow.com/questions/30245395/typeerror-cant-escape-psycopg2-extensions-binary-to-binary) –