代码:
1. HTML
<div>
<input type="file" name="FileUpload" id="FileUpload">
<a class="layui-btn layui-btn-mini" id="btn_uploadimg">上传图片</a>
</div>
2. Ajax实现
<script type="text/jscript">
var csrftoken = "{{ csrf_token() }}"
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
})
$(function () {
$("#btn_uploadimg").click(function () {
var fileObj = document.getElementById("FileUpload").files[0]; // js 获取文件对象
if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
alert("请选择图片");
return;
}
var formFile = new FormData();
formFile.append("action", "UploadVMKImagePath");
formFile.append("file", fileObj); //加入文件对象
//第一种 XMLHttpRequest 对象
//var xhr = new XMLHttpRequest();
//xhr.open("post", "/Admin/Ajax/VMKHandler.ashx", true);
//xhr.onload = function () {
// alert("上传完成!");
//};
//xhr.send(formFile);
//第二种 ajax 提交
var form_data = formFile;
$.ajax({
url: "/upload/",
data: form_data,
type: "post",
dataType: "json",
cache: false,//上传文件无需缓存
processData: false,//用于对data参数进行序列化处理 这里必须false
contentType: false, //必须
success: function (result) {
alert("上传完成!");
},
})
})
})
</script>
3. 后台Flask
from flask import Flask,render_template,request,redirect,url_for
from werkzeug.utils import secure_filename
import os
from flask import send_from_directory
from werkzeug import SharedDataMiddleware
UPLOAD_FOLDER = '/uploads' #文件存放路径
ALLOWED_EXTENSIONS = set(['jpg']) #限制上传文件格式
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/upload/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return '{"filename":"%s"}' % filename
return ''
以上基本上就可以实现上传功能了。
参考:
- Ajax+Python flask实现上传文件功能
- Flask实现图片的上传、下载及展示
- flask实现图片上传
- Python文件上传功能简单实现
- WEB的文件上传实现
- python – 使用Flask上传文件夹/文件
- flask 文件上传
- jQuery prop() 方法
- 选择文件,通过ajax方式传递选择的文件,后端使用controller接受
- 用AJAX异步提交表单上传多个文件(type=‘file‘)案例
- FormData 对象的使用
- 通过jQuery Ajax使用FormData对象上传文件
- 使用ajax提交form表单,包括ajax文件上传
- 通过Ajax方式上传文件,使用FormData进行Ajax请求
- HTML5+Ajax上传文件
- Ajax提交Form数据及文件上传
- 使用jQuery Ajax异步上传文件方法总结
- ajax上传文件是怎么实现的
- 通过new FormData对象异步上传文件
- python学习-Flask使用ajax进行前后端交互
- 前端与后端的数据交互(jquery ajax+python flask)
- 前后端json数据发送和接收
- ajax实现文件上传 使用FormData进行Ajax请求
- ajax如何上传文件(整理)
- 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
- AJAX请求 $.ajaxSetup方法的使用