gpt4 book ai didi

python - Flask FileStorage 保存空文件

转载 作者:行者123 更新时间:2023-12-01 01:19:07 26 4
gpt4 key购买 nike

我正在使用 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>

打印语句显示了这一点: Print results

打印的顺序是:

  1. 请求方式
  2. 请求参数
  3. 申请表
  4. 请求文件
  5. 归档变量的类型

archivo的大小始终是32,无论我上传什么图像,始终是32,所以从那时起就已经是空的,还没弄清楚为什么会空。我正在按照示例进行操作。

https://flask-wtf.readthedocs.io/en/latest/form.html

最佳答案

首先,文件的大小始终为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com