Есть ли способ прочитать как данные формы, так и загруженный файл (multipart / form-data) с помощью flask

#rest #http #flask

#rest #http #flask

Вопрос:

Я предоставляю flask api с content-type = multipart / form-data, который принимает как json, так и zip-файл в качестве входных данных. Когда я пытаюсь прочитать, я могу получить zip-файл. однако я не могу прочитать файл json. Я пробовал несколько вещей, но ни у одного из них нет данных json. Поддерживается ли это вообще?

Я использую анализатор flask restplus для чтения содержимого файла с помощью «werkzeug.datastructures import FileStorage», тогда как для получения json я использовал различные параметры, приведенные ниже, ни один не работал ->request.form

-> dict(request.form)

-> запрос.files.get_json(force= True)

-> api.полезная нагрузка

 from werkzeug.datastructures import FileStorage, ImmutableMultiDict


parser= api.parser()
parser.add_argument('opc-retry-token', location='headers',required='true')

parser.add_argument('file', location='files', type=FileStorage, required=True)

def init(self):
        args = parser.parse_args()
        token = args['opc-retry-token']
        self.token=token
        self.args=args
        logger.info(args) 

# above log  gives {'opc-retry-token': '1234', 'file': <FileStorage:         


@ns.route('/prepare')
@api.expect(parser)
class OICPrepare(Resource):

    @api.expect(oic_prepare)
    def post(self):

        init(self)
        logger.info(request.form)
# above log gives 'None'
        data = dict(request.form)
        logger.info(data)
# above log gives ImmutableMultiDict([])

        logger.info(request.files.get_json(force=True))
#above log gives {}       
        upload_file = self.args['file']
        upload_file.save('/oic_admin/wallet.zip')
#above save command does the zip file properly 
  

Я ожидаю, что как zip-файл, так и json будут прочитаны flask api.

Комментарии:

1. Насколько я понимаю из документации , Flask RESTPlus поддерживает загрузку только одного файла за раз. Решение Pure Flask поддерживает несколько файлов, см. Здесь .

2. json отправляется как formdata. например {«data»:{«a»: «string»},{«b»:»string»}}