使用Python及REST API从URL上传图片到WordPress报500文件类型错误
问题根因
这个文件类型拦截报错和WordPress后台的文件类型白名单、上传权限没有关系,完全是代码传参错误导致的:
requests的files参数格式写错了。你直接把图片二进制内容塞给了file字段,没有携带文件名、MIME类型信息,WordPress拿到上传流之后识别不出是什么格式的文件,直接抛出类型不允许的错误。- 你把
Content-Disposition写在了全局请求头里完全无效。上传接口用的是multipart/form-data编码,每个文件分段有自己独立的Content-Disposition声明,requests发送请求时会自动生成这个头,你写在全局的配置不仅不会生效,还可能打乱服务端的解析逻辑。 caption这类媒体元数据传错了位置。说明文字、标题这类属性不属于文件内容,不能放在files字典里传,要放在单独的data参数里。
修正后的可运行代码
以下代码完全在内存中处理远程图片,不会将图片保存到本地磁盘:
import base64 import requests import mimetypes def get_auth_header(user, password): credentials = f"{user}:{password}" token = base64.b64encode(credentials.encode()).decode("utf-8") # 不需要在全局头添加Content-Disposition,requests会自动生成对应分段头 return { "Authorization": f"Basic {token}" } def upload_image_from_url(image_url, wp_site_url, auth_header, upload_filename="test1.jpg"): # 拉取远程图片二进制内容 img_resp = requests.get(image_url, timeout=10) img_resp.raise_for_status() img_content = img_resp.content # 自动识别对应文件的MIME类型 mime_type, _ = mimetypes.guess_type(upload_filename) if not mime_type: mime_type = "image/jpeg" # 构造符合requests要求的files参数:格式为(字段名, (文件名, 文件二进制内容, MIME类型)) files = { "file": (upload_filename, img_content, mime_type) } # 媒体元数据放在data参数传递 data = { "caption": "My great demo picture" } # 发起上传请求 upload_resp = requests.post( f"{wp_site_url.rstrip('/')}/wp-json/wp/v2/media", headers=auth_header, files=files, data=data, timeout=30 ) print("响应状态码:", upload_resp.status_code) print("响应内容:", upload_resp.text) return upload_resp.json() if __name__ == "__main__": # 替换为自己的站点信息 auth = get_auth_header("你的WordPress后台用户名", "用户个人页生成的应用密码") remote_img_url = "https://cdn.pixabay.com/photo/2021/11/30/08/24/strawberries-6834750_1280.jpg" upload_image_from_url( image_url=remote_img_url, wp_site_url="https://你的WordPress站点域名", auth_header=auth, upload_filename="strawberry_demo.jpg" )
额外注意事项
- 认证必须使用WordPress后台「用户-个人资料」页面生成的应用密码,不能直接用账号登录密码,否则会触发权限报错。
- 拉取远程图片、上传媒体的请求都加了超时配置,避免远程资源无法访问时脚本无限卡死。
- 如果后续需要上传其他格式的文件,只需要替换对应文件的URL、文件名,MIME类型会自动识别,不需要手动修改代码。
内容的提问来源于stack exchange,提问作者urek mazino
相关产品推荐
相关产品推荐

