python - 使用请求发送到其他 API 时,上传到 Flask 的文件为空
问题描述
我在 Flask 中有一个 API,它接收上传的文件并将其上传到另一个带有请求的 API。但是,使用请求上传文件不起作用,第 3 方 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
}
解决方案
推荐阅读
- google-apps-script - Google Forms Apps 脚本错误(例外:无法添加图片,请稍等,然后重试)
- django - POSTMAN 上的 CSRF 令牌丢失或不正确
- typescript - 带有 Lerna 和 TypeScript 的 Monorepo 无法通过路径别名导入包
- javascript - 哪个执行时间更少?
- c# - 如何在 ASP.NET Core MVC 和 Angular 项目中使用 Angular Material 组件(特别是滑块)?
- javascript - 在继续之前等待的承诺不等待 resolve()
- python - 我如何使用 PyMC3 来估计一个离散值 A 必须构造一个 for 循环?
- bash - 添加文件后如何循环bash脚本?
- sql - Oracle 拆分表列分隔值到行
- mongodb - 为什么我不能将 Firebase Local Emulator Suite 用作自托管解决方案?