Python基于 Flask 创建简单Web服务并接收文件
- 在全部网口上创建web服务, 监听8080端口
- 关闭debug模式
- GET时返回HTML界面, 用于提交文件
- POST到 /upload 时, 从接收的 file 变量中读取文件, 并传递给 opencv 解析为 image 对象
from flask import Flask, request, redirect, url_for
import os
import cv2
import numpy
import json
app = Flask(__name__)
app.config['ALLOWED_EXTENSIONS'] = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
# Function to check if the file has an allowed extension
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def index():
return '''
<html>
<body>
<h1>Service is Ready</h1>
<p></p>
<form method="POST" action="/upload" enctype="multipart/form-data">
Function: <input type="text" name="func"> File: <input type="file" name="file"> <input type="submit" value="Process">
</form>
</body>
</html>
'''
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return 'No file part'
file = request.files['file']
if file.filename == '':
return 'No selected file'
if file and allowed_file(file.filename):
result = {}
try:
#read image file string data
filestr = file.read()
#convert string data to numpy array
file_bytes = numpy.frombuffer(filestr, numpy.uint8)
# convert numpy array to image
img = cv2.imdecode(file_bytes, cv2.IMREAD_UNCHANGED)
height, width = img.shape[:2]
result = {
"code": 0,
"message": "succ",
"data": {
"size": file_bytes.size,
"height": height,
"width": width
}
}
except:
print("Error occurred")
result = {
"code": 1,
"message": "error",
"data": None
}
pass
return json.dumps(result)
else:
return 'Invalid file format'
if __name__ == '__main__':
# Start the Flask server on port 8080
app.run(debug=False, host='0.0.0.0', port=8080)
如果要保存文件
filename = os.path.join(PYHSICAL_PATH, file.filename)
file.save(filename)