首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Flask-RESTPlus发布多个文件?

如何使用Flask-RESTPlus发布多个文件?
EN

Stack Overflow用户
提问于 2019-09-19 18:33:38
回答 2查看 1.7K关注 0票数 4

我希望能够发布一组文件。我让它在单个文件上工作,但在将action="append"添加到解析器时不起作用。在添加action时,swagger UI允许我上传多个文件,但是在打印files变量时,即使我选择了多个文件,它也是None。如何使用Flask-RESTPlus发布文件数组?

代码语言:javascript
复制
    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 ""
EN

回答 2

Stack Overflow用户

发布于 2019-10-11 15:15:04

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2020-01-30 14:35:59

尝试使用request.files.getlist

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58009068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档