Файл, загруженный во Flask, пуст при отправке в другой API с запросами - PullRequest
4 голосов
/ 12 июня 2019

У меня есть API во Flask, который берет загруженный файл и загружает его в другой API с запросами. Однако загрузка файла с запросами не работает, сторонний API возвращается с ошибкой No files provided.

@deals_bp.route('/file', methods=['POST'])
def upload_deal_file():
    args = request.args.to_dict()
    args['api_token'] = os.environ.get('API_TOKEN')

    if request.method == 'POST':
        data_err_str = ''
        data = request.form.to_dict()

        if not data['deal_id']:
            data_err_str = 'deal_id not included'
        elif not set(data.keys()).issubset(['deal_id']):
            data_err_str = 'no data other than deal_id must be included'

        if 'file' not in request.files:
            return abort(400, description="Please select a pdf file " + data_err_str)

        # definition of the file variable, a Werkzeug FileStorage object
        file = request.files['file']

        if file.filename == '':
            return abort(400, description="Please select a pdf file " + data_err_str)

        if file and allowed_file(file.filename):
            if data_err_str != '':
                return abort(400, description=data_err_str)

            # beginning of problem code block
            file_obj = {'file': (file.filename, file.read())}
            response = requests.post(os.environ.get('API_URL') + '/files', params=args, files=file_obj, data=data)
            # end of problem code block

            res_gzip = gzip.compress(response.content)
            return (res_gzip, response.status_code, response.headers.items())
        else:
            return abort(400, description="File is not pdf" + data_err_str)

response из requests.post:

{
    "success": false,
    "error": "No files provided",
    "error_info": "Please check developers.pipedrive.com for more information about Pipedrive API.",
    "data": null,
    "additional_data": null
}
...