Joe*_*oey 6 python file-upload flask flask-restplus
我希望能够发布一组文件。action="append"我让它可以使用单个文件,但在添加到解析器时它不起作用。添加时action,swagger UI 允许我上传多个文件,但在打印files变量时None,即使我选择了多个文件也是如此。如何使用 Flask-RESTPlus POST 一组文件?
from flask_restplus import Namespace, Resource, reqparse
from werkzeug.datastructures import FileStorage
file_upload = Namespace(name="files")
upload_parser = reqparse.RequestParser(bundle_errors=True)
upload_parser.add_argument(
name="files",
type=FileStorage,
location="files",
action="append" # If this is removed it works with 1 file
)
@files_upload.route("/")
class Files(Resource):
@files_upload.expect(upload_parser)
def post(self):
args = upload_parser.parser_args()
files = args["files"]
do_something(files)
return ""
Run Code Online (Sandbox Code Playgroud)
class UploadImg(Resource):
def store_images(self,image,filename):
S3_KEY = '************'
S3_SECRET = '****************'
S3_BUCKET = '****'
file='pictures/'+filename
content_type = request.mimetype
s3 = boto3.client('s3',
config=boto3.session.Config(signature_version='s3v4'),
region_name='ap-south-1',
aws_access_key_id=S3_KEY,
aws_secret_access_key=S3_SECRET)
s3.put_object(Body=image, Bucket=S3_BUCKET, Key=file,
ContentType=content_type)
def post(self):
files= request.files.getlist('image')
for img in files:
print(type(img))
print(img.filename)
self.store_images(img,img.filename)
return '',201
Run Code Online (Sandbox Code Playgroud)
小智 3
from flask import Flask
from flask_restplus import Api, Resource
import werkzeug
from werkzeug.utils import secure_filename
from flask_restplus import reqparse
import os
file_upload = reqparse.RequestParser()
file_upload.add_argument('doc1',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='Document 1')
file_upload.add_argument('doc2',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='Document 1')
file_upload.add_argument('doc3',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='Document 1')
app = Flask(__name__)
api = Api(app = app)
app.config['Upload_folder'] = './static/'
@api.route('/upload/')
class my_file_upload(Resource):
@api.expect(file_upload)
def post(self):
args = file_upload.parse_args()
args['doc1'].save(os.path.join(app.config['Upload_folder'],secure_filename(args['doc1'].filename)))
args['doc2'].save(os.path.join(app.config['Upload_folder'],secure_filename(args['doc1'].filename)))
args['doc3'].save(os.path.join(app.config['Upload_folder'],secure_filename(args['doc1'].filename)))
a = [args['doc1'],args['doc2'],args['doc3']]
print(type(a))
return {'status': 'Done'}
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2775 次 |
| 最近记录: |