Как отправить несколько файлов с помощью Flask-RESTPlus?

Я хочу иметь возможность отправлять массив файлов. У меня работает с одним файлом, но не работает при добавлении action="append" в парсер. При добавлении action пользовательский интерфейс swagger позволяет мне загружать несколько файлов, но при печати переменной files это None, хотя я выбрал несколько файлов. Как я могу отправить массив файлов с помощью Flask-RESTPlus?

    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 ""

person Joey    schedule 19.09.2019    source источник


Ответы (2)


Попробуйте с request.files.getlist

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
person Ramesh Ponnusamy    schedule 30.01.2020
comment
С этим ответом API будет принимать файлы и нормально их обрабатывать, но если вы искали, как и я, решение, которое также помогает flask_restplus понять, что он должен документировать метод API в swagger с вводом загрузки файла, вы можете найти этот ответ полезным: stackoverflow.com/a/43214695/5433896. - person Sander Vanden Hautte; 07.04.2020

person    schedule
comment
Это не решает мою проблему. Используя этот метод, мне пришлось бы каждый раз загружать ровно 3 файла. Я хочу загрузить любое количество файлов - person Joey; 08.11.2019