作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Flask、WTForms 和 Flask-WTF 来保存文件,但该文件始终存储为空文件。它没有显示任何错误。
表格:
from flask_wtf import FlaskForm
from flask_wtf.file import FileField
from wtforms import StringField, SubmitField
class UserForm(FlaskForm):
username = StringField('u', validators=[InputRequired()])
email = StringField('e', validators=[InputRequired()])
password = StringField('c', validators=[InputRequired()])
signature = FileField('s')
save = SubmitField('a')
Flask 路线/功能:
@bp.route('/manage/user', methods=['GET', 'POST'])
@login_required
def manage_user():
form = UserForm()
action = 'create'
try:
if form.validate_on_submit():
if form.save.data:
print('request.method', request.method)
print('request.args', request.args)
print('request.form', request.form)
print('request.files', request.files)
# archivo = request.files['signature']
# archivo = request.files.items()[0]
archivo = form.signature.data
print(type(archivo))
if archivo:
image_data = archivo.read()
basedir = os.path.abspath(os.path.dirname(__file__))
filename = secure_filename(form.username.data+'.png')
full_dir = os.path.join(basedir, '..\\static\\img', filename)
print(sys.getsizeof(archivo))
archivo.save(full_dir)
return redirect(url_for('main.manage'))
except Exception as e:
print(e)
return render_template('manage_user.html', title=('Admon'), form=form, action=action)
HTML
<form action="" method="POST" role="form" class="form-horizontal" enctype="multipart/form-data">
{{ form.csrf_token() }}
<div class="form-group">
<label class="control-label col-sm-3">Firma</label>
<div class="col-sm-6">
{% if action=='create' %}
<!-- Other fields -->
{{ form.signature(placeholder="Firma", type="file", class="form-control", accept="image/*", required="True") }}
<img id="firmaimg" src="{{ url_for('static', filename='img/firma130x50_dummy.png') }}" alt="Firma" />
{{ form.save(class="btn btn-success btn-md") }}
{% endif %}
</div>
</div>
</form>
打印的顺序是:
archivo的大小始终是32,无论我上传什么图像,始终是32,所以从那时起就已经是空的,还没弄清楚为什么会空。我正在按照示例进行操作。
最佳答案
首先,文件的大小始终为 32,因为 sys.getsizeof() 返回 Python 用于该对象的内存量(以字节为单位),如 docs 中所述。 .
要打印实际文件大小,您可以使用:
os.path.getsize('path')
使用它,您应该看到打印的文件大小实际上为 0。
其次,通过删除:
image_data = archivio.read()
您应该能够成功地将文件保存在所需位置。
我不确定你想用 archivio.read() 来完成什么。
关于python - Flask FileStorage 保存空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013497/
我是一名优秀的程序员,十分优秀!