flask中的表單文件上傳


在表單中上傳文件時,一定要加入 enctype="multipart/form-data" 屬性

為什么要加入這個屬性呢:

enctype就是encodetype就是編碼類型的意思。

multipart/form-data是指表單數據有多部分構成,既有文本數據,又有文件等二進制數據的意思。

需要注意的是:默認情況下,enctype的值是application/x-www-form-urlencoded,不能用於文件上傳,只有使用了multipart/form-data,才能完整的傳遞文件數據。

application/x-www-form-urlencoded只能上傳文本格式的文件,而multipart/form-data是講將文件以二進制的形式上傳,可以實現多種文件的上傳

一般獲取上傳的數據可以用request.form[],[]中填入name屬性

而在視圖函數中獲取表單上傳的文件可以用request.file.get()方法,get中填name屬性

而上傳文件到指定文件夾,有幾種方法

我這是使用的是: 文件.save(文件路徑)

數據庫表模型和視圖函數如下:

class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(48), unique=True)
sex = db.Column(db.String(12))
pic = db.Column(db.String(48))

@app.route('/index/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html')
if request.method == 'POST':
     # 獲取上傳的文件和數據
icons = request.files.get('icons')
name = request.form['name']
sex = request.form['sex']
# 指定上傳路徑
UPLOAD_DIC = 'static/upload'
# 拼接文件全路徑
file_path = os.path.join(UPLOAD_DIC,icons.filename)
# 上傳文件到指定路徑
icons.save(file_path)
user= Users(name=name, sex=sex, pic=file_path)
db.session.add(user)
db.session.commit()
msg = '上傳成功'
return render_template('index.html',msg=msg,pic = file_path)
模板如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上傳圖片</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" >
{% if pic %}
<div >
<img style="width: 200px;height: 100px" src="/{{ pic }}/ " alt="">
</div>
{% endif %}
<label for="name">姓名</label>
<input type="text" id="name" name="name">
<label for="sex"></label>
<br>
男<input type="radio" name="sex" id="sex" value="男">
女<input type="radio" name="sex" id="sex" value="女">
<br>
<input type="file" name="icons">
<br>
<input type="submit" value="提交">
</form>
</body>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM