通过flask和wtforms保存多个文件MultipleFileField

时间:2020-09-02 18:11:56

标签: python flask flask-wtforms wtforms

我正在尝试使用MultipleFileField从Flask的请求中获取并保存多个文件。但是问题是我无法遍历它。我的意思是
表格类

class TestForm(FlaskForm):
    user_id = IntegerField('user_id', validators=[DataRequired()])
    name = StringField('name', validators=[DataRequired()])
    description = StringField('description', validators=[DataRequired()])
    category_id = IntegerField('category_id', validators=[DataRequired()])
    date_of_purchase = DateField('date_of_purchase', validators=[DataRequired()])
    guarantee_period = IntegerField('guarantee_period', validators=[DataRequired()])
    files = MultipleFileField('files')

并查看代码:

form = TestForm()
...
files = form.files
for file in files:
   with open(path.join('some_path', file.filename), 'wb') as f:
        f.write(file.read())

我收到如此大量的请求:

["<_io.BufferedReader name='1.jpg'>", "<_io.BufferedReader name='2.jpg'>"]

但是我得到了错误:

AttributeError: 'str' object has no attribute 'filename'

因此它将io.BufferedReader转换为str。我该怎么做才能解决此问题?

1 个答案:

答案 0 :(得分:0)

您的“文件”是一个字符串,在with语句之前将其切成薄片并保存到文件名变量中,然后在with语句中仅包含“ filename”。像这样:

form = TestForm()
...
files = form.files.data
for file in files:
   with open(path.join('some_path', file), 'wb') as f:
        f.write(file.read())
相关问题