我需要從wtforms獲取二進制文件並將其作爲bytea存儲在postgresql中。我不需要將其永久存儲爲文件。根據我對Flask offical doc的理解,我可以通過request.files。['myfile']。filename或secure_filename(f.filename)來訪問文件名。然而,他們兩人給我一個錯誤:IO錯誤:[錯誤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) –