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

如何用Python向WordPress新REST API上传multipart/form-data媒体文件?

如何通过WordPress新版API上传媒体文件?

我正在构建一个API,用于通过WordPress新版API向我的WordPress网站上传媒体文件,搜遍全网和Stack Overflow找到的都是旧版API的方案,根本解决不了问题。

我写了下面这个函数,用来向API发送multipart/form-data请求:

img = open(image_path, 'rb')
file_name = os.path.basename(image)

print('Compressing and sending data...')

NEW_HEADER = {
    'Authorization': f'BEARER {WORDPRESS_ACCESS_TOKEN}',
    'Content-Disposition': f'attachment; filename={file_name}',
    'Content-Type': 'multipart/form-data'
}

response = requests.post(
    url=WORDPRESS_MEDIA_URL,
    files={'media': img.read()},
    headers=NEW_HEADER
)

print(response.request)
print(response.text)
return response

返回结果是:

{"media":[],"errors":[]}
<Response [200]>
OK

请求能到达端点,但返回空的media数组和空错误列表。代码可能比较粗糙,见谅。


补充信息(首次发布后)

用Postman测试API能得到预期返回:

{"media":[{"id":"xxxx","date":"2022-11-03T20:06:54-05:00","parent":0,"link":"https:mywebsite","title":"mypicture","caption":"","description":"",...}

这说明POST请求本身没问题,于是我对比本地请求和Postman请求,发现本地请求里的media字段是空的:

{'User-Agent': 'python-requests/2.28.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'BEARER QnkXS43KhiqO7Oa!9G!zN2gnz90hHhZEribF2ddZu0h8&5V0p5M69^OwDb9E6H%B', 'Content-Type': 'multipart/form-data', 'Content-Length': '6'}
media=

Postman里media显示为undefined(不确定是不是Postman没法解析JSON格式的图片)。我怀疑是图片路径调用方式错了,或者请求编码有问题。


更多补充信息

我已经把图片从外部目录复制到项目目录,排除了路径问题,但不管怎么发送数据,结果还是和空请求一样:

response = requests.post(
    url=WORDPRESS_MEDIA_URL, # there is no data sent in this request.
    headers=NEW_HEADER
)

返回结果依旧是:

{"media":[],"errors":[]}
<Response [200]>
OK

这说明WordPress收到了请求,但没拿到需要的信息,问题肯定出在数据发送方式上。

于是我查资料发现requests-toolbelt可以协助发送multipart/form-data请求,写了下面这段代码:

data = MultipartEncoder(fields={'media': (file_name, img, 'image/jpeg')})

new_header = {
    'Authorization': f'BEARER {WORDPRESS_ACCESS_TOKEN}',
    'Content-Type': data.content_type,
    'Content-Disposition': 'form-data; name="media"; filename="%s"' % name_img,
}

response = requests.post(WORDPRESS_MEDIA_URL, data=data, headers=new_header)

但这次返回错误:

{"error":"unsupported_mime_type","message":"File type unknown"}
<Response [400]>
Bad Request

用MultipartEncoder发送请求时出现“不支持的MIME类型”错误,虽然不再是空的200响应,但我怀疑是MultipartEncoder用错了,或者图片没做正确处理。求各位给点思路。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:05:27