Flask-RESTful - 上传图片
Flask-RESTful - Upload image
我想知道如何通过创建 API 服务来上传文件?
class UploadImage(Resource):
def post(self, fname):
file = request.files['file']
if file:
# save image
else:
# return error
return {'False'}
路线
api.add_resource(UploadImage, '/api/uploadimage/<string:fname>')
然后 HTML
<input type="file" name="file">
我在服务器端启用了 CORS
我使用 angular.js 作为前端,ng-upload 如果这很重要,但也可以使用 CURL 语句!
以下代码行中的内容应该有所帮助。
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
extension = os.path.splitext(file.filename)[1]
f_name = str(uuid.uuid4()) + extension
file.save(os.path.join(app.config['UPLOAD_FOLDER'], f_name))
return json.dumps({'filename':f_name})
class UploadWavAPI(Resource):
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('audio', type=werkzeug.FileStorage, location='files')
args = parse.parse_args()
stream = args['audio'].stream
wav_file = wave.open(stream, 'rb')
signal = wav_file.readframes(-1)
signal = np.fromstring(signal, 'Int16')
fs = wav_file.getframerate()
wav_file.close()
您应该处理流,如果它是 wav,上面的代码就可以工作。
对于图像,您应该存储在数据库中或上传到 AWS S3 或 Google 存储
上传文件保存如下:
from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug
class UploadImage(Resource):
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('file', type=werkzeug.datastructures.FileStorage, location='files')
args = parse.parse_args()
image_file = args['file']
image_file.save("your_file_name.jpg")
你可以使用来自 flask 的请求
class UploadImage(Resource):
def post(self, fname):
file = request.files['file']
if file and allowed_file(file.filename):
# From flask uploading tutorial
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
else:
# return error
return {'False'}
以下是一个使用 curl 上传图像并将其保存在本地的简单程序。
from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug
import cv2
import numpy as np
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('file',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='provide a file')
class SaveImage(Resource):
def post(self):
args = parser.parse_args()
# read like a stream
stream = args['file'].read()
# convert to numpy array
npimg = np.fromstring(stream, np.uint8)
# convert numpy array to image
img = cv2.imdecode(npimg, cv2.IMREAD_UNCHANGED)
cv2.imwrite("saved_file.jpg", img)
api.add_resource(SaveImage, '/image')
if __name__ == '__main__':
app.run(debug=True)
您可以像这样使用 curl:
curl localhost:port/image -F file=@image_filename.jpg
#Image(s) and file Upload
from flask import Flask, json, request, jsonify
import os
import urllib.request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.secret_key = "caircocoders-ednalan"
UPLOAD_FOLDER = 'static/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/api/upload', methods=['POST'])
def upload_image():
if 'image' not in request.files:
resp = jsonify({
'status' : False,
'message' : 'Image is not defined'})
resp.status_code = 400
return resp
files = request.files.getlist('image')
errors = {}
success = False
for photo in files:
if photo and allowed_file(photo.filename):
filename = secure_filename(photo.filename)
photo.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
success = True
else:
errors[photo.filename] = 'Image type is not allowed'
if success and errors:
errors['message'] = jsonify({
'data' : photo.filename,
'status' : True,
'message' : 'Image(s) successfully uploaded'})
resp = jsonify(errors)
resp.status_code = 500
return resp
if success:
resp = jsonify({
'data' : photo.filename,
'status' : True,
'message' : 'Images successfully uploaded'})
resp.status_code = 201
return resp
else:
resp = jsonify(errors)
resp.status_code = 500
return resp
我想知道如何通过创建 API 服务来上传文件?
class UploadImage(Resource):
def post(self, fname):
file = request.files['file']
if file:
# save image
else:
# return error
return {'False'}
路线
api.add_resource(UploadImage, '/api/uploadimage/<string:fname>')
然后 HTML
<input type="file" name="file">
我在服务器端启用了 CORS
我使用 angular.js 作为前端,ng-upload 如果这很重要,但也可以使用 CURL 语句!
以下代码行中的内容应该有所帮助。
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
extension = os.path.splitext(file.filename)[1]
f_name = str(uuid.uuid4()) + extension
file.save(os.path.join(app.config['UPLOAD_FOLDER'], f_name))
return json.dumps({'filename':f_name})
class UploadWavAPI(Resource):
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('audio', type=werkzeug.FileStorage, location='files')
args = parse.parse_args()
stream = args['audio'].stream
wav_file = wave.open(stream, 'rb')
signal = wav_file.readframes(-1)
signal = np.fromstring(signal, 'Int16')
fs = wav_file.getframerate()
wav_file.close()
您应该处理流,如果它是 wav,上面的代码就可以工作。 对于图像,您应该存储在数据库中或上传到 AWS S3 或 Google 存储
上传文件保存如下:
from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug
class UploadImage(Resource):
def post(self):
parse = reqparse.RequestParser()
parse.add_argument('file', type=werkzeug.datastructures.FileStorage, location='files')
args = parse.parse_args()
image_file = args['file']
image_file.save("your_file_name.jpg")
你可以使用来自 flask 的请求
class UploadImage(Resource):
def post(self, fname):
file = request.files['file']
if file and allowed_file(file.filename):
# From flask uploading tutorial
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
else:
# return error
return {'False'}
以下是一个使用 curl 上传图像并将其保存在本地的简单程序。
from flask import Flask
from flask_restful import Resource, Api, reqparse
import werkzeug
import cv2
import numpy as np
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('file',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='provide a file')
class SaveImage(Resource):
def post(self):
args = parser.parse_args()
# read like a stream
stream = args['file'].read()
# convert to numpy array
npimg = np.fromstring(stream, np.uint8)
# convert numpy array to image
img = cv2.imdecode(npimg, cv2.IMREAD_UNCHANGED)
cv2.imwrite("saved_file.jpg", img)
api.add_resource(SaveImage, '/image')
if __name__ == '__main__':
app.run(debug=True)
您可以像这样使用 curl:
curl localhost:port/image -F file=@image_filename.jpg
#Image(s) and file Upload
from flask import Flask, json, request, jsonify
import os
import urllib.request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.secret_key = "caircocoders-ednalan"
UPLOAD_FOLDER = 'static/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/api/upload', methods=['POST'])
def upload_image():
if 'image' not in request.files:
resp = jsonify({
'status' : False,
'message' : 'Image is not defined'})
resp.status_code = 400
return resp
files = request.files.getlist('image')
errors = {}
success = False
for photo in files:
if photo and allowed_file(photo.filename):
filename = secure_filename(photo.filename)
photo.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
success = True
else:
errors[photo.filename] = 'Image type is not allowed'
if success and errors:
errors['message'] = jsonify({
'data' : photo.filename,
'status' : True,
'message' : 'Image(s) successfully uploaded'})
resp = jsonify(errors)
resp.status_code = 500
return resp
if success:
resp = jsonify({
'data' : photo.filename,
'status' : True,
'message' : 'Images successfully uploaded'})
resp.status_code = 201
return resp
else:
resp = jsonify(errors)
resp.status_code = 500
return resp