1. 工程代码结构
templates +UploadFlush.html +UploadAjax.html UploadServer.py
2. 上后端代码(基于Python Flask):
#UploadServer.py #coding=utf-8 __author__ = ‘root‘ from flask import request from flask import Flask from flask import render_template from werkzeug import secure_filename app = Flask(__name__) @app.route(‘/upload‘, methods=[‘Get‘, ‘POST‘]) def upload_fie(): if request.method == ‘POST‘: f = request.files[‘file‘] #windows下放入D:/tempfile/ #f.save(‘D:/tempfile/‘+secure_filename(f.filename)) #Linux下放入/tmp f.save(‘/tmp/‘+secure_filename(f.filename)) @app.route(‘/upload_flush‘) def upload_flush(): return render_template(‘UploadFlush.html‘) @app.route(‘/upload_ajax‘) def upload_ajax(): return render_template(‘UploadAjax.html‘) if __name__ == ‘__main__‘: app.run(debug=True, host=‘0.0.0.0‘, port=5001)
3. 上前端代码
1) UploadFlush.html 代码,完成后刷新。
<!--UploadFlush.html--> <!doctype html> <title>UploadFlush</title> <h1>UploadFlush</h1> <form action="/upload" method="POST" enctype="multipart/form-data"> <input type=file name=file> <input type=submit value=Upload> </form>
2) UploadAjax.html 代码,上传时进度条实时显示进度。
<!--UploadAjax.html-->
<!DOCTYPE html>
<html>
<head>
<title>UploadAjax</title>
<script type="text/javascript">
function UpladFile() {
// 获取文件对象
var fileObj = document.getElementById("file").files[0];
// 接收上传文件的后台地址
var FileController = "/upload";
// FormData 对象
var form = new FormData();
// 文件对象
form.append("file", fileObj);
// XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
xhr.open("post", FileController, true);
xhr.onload = function () {
//console.log("上传完成!");
};
xhr.upload.addEventListener("progress", progressFunction, false);
xhr.send(form);
}
function progressFunction(evt) {
var progressBar = document.getElementById("progressBar");
var percentageDiv = document.getElementById("percentage");
if (evt.lengthComputable) {
progressBar.max = evt.total;
progressBar.value = evt.loaded;
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
}
}
</script>
</head>
<body>
<input type="file" id="file" name="file" />
<br/><br/>
<input type="button" onclick="UpladFile()" value="确定上传" />
<progress id="progressBar" value="0" max="100">
</progress>
<span id="percentage"></span>
</body>
</html>
原文:http://my.oschina.net/crooner/blog/519694