You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Form Recognizer自定义模型调用报1000无效输入文件错误如何解决?

问题排查与解决方案

核心错误原因

你当前代码的核心问题是请求传输格式冲突:

  • 当你使用requests库的files参数上传文件时,requests会自动将请求头的Content-Type设置为multipart/form-data,同时自动处理文件的二进制封装。
  • 你手动指定Content-Type: application/{file_type}会覆盖该默认值,导致自定义模型接口无法正常识别请求中的文件内容,因此返回Invalid input file报错。
  • layout接口的入参校验逻辑兼容性更高,所以可以正常运行。

修复方案

你可以从两种合法的请求方式中选一种即可:

方式1:保留files参数,删除手动设置的Content-Type头

这是更简单的方案,修改后的代码如下:

import requests
import os
import pathlib

# 待评估文件路径
floc = 'path/to/file'

# 只保留API Key头,Content-Type交给requests自动处理
headers = {
    'Ocp-Apim-Subscription-Key': os.environ["AZURE_FORM_RECOGNIZER_KEY"]
}

# 二进制读取文件
files = {'file': open(floc, 'rb')}

# 发送分析请求
r = requests.post(
    f'https://eastus.api.cognitive.microsoft.com/formrecognizer/v2.1/custom/models/{os.environ["MODEL_ID"]}/analyze',
    headers=headers,
    files=files
)

print(r.status_code)
print(r.json())

方式2:直接传输二进制文件,手动指定Content-Type

如果不想用multipart/form-data格式,就删除files参数,把二进制内容直接放到data参数里:

import requests
import os
import pathlib

# 待评估文件路径
floc = 'path/to/file'

# 提取文件类型
file_type = pathlib.Path(floc).suffix[1:]

# 设置请求头
headers = {
    'Content-Type': f'application/{file_type}',
    'Ocp-Apim-Subscription-Key': os.environ["AZURE_FORM_RECOGNIZER_KEY"]
}

# 直接读取文件二进制内容
with open(floc, 'rb') as f:
    file_data = f.read()

# 发送分析请求
r = requests.post(
    f'https://eastus.api.cognitive.microsoft.com/formrecognizer/v2.1/custom/models/{os.environ["MODEL_ID"]}/analyze',
    headers=headers,
    data=file_data
)

print(r.status_code)
print(r.json())

其他可选排查点

如果修改后仍然报错,可以依次检查以下项:

  • 确认测试文件本身没有损坏、没有加密、没有设置编辑限制,单页文件大小不超过50MB,像素在50 x 50到10000 x 10000之间
  • 确认MODEL_ID、API密钥、接口区域和你训练模型时的资源配置完全一致
  • 确认自定义模型训练时使用的文件格式和你测试的格式匹配,训练时标注的字段没有逻辑错误

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:18:03